하루를 끝내며 다짐하기

프로그래머스 JAVA LV.1 문자열 내 p와 y의 개수 본문

Algorithm

프로그래머스 JAVA LV.1 문자열 내 p와 y의 개수

보슬비처럼 2024. 11. 18. 22:10

 

 

문제에서 정리해봐야할 요점

주어진 문자열 s에서 문자 'p'와 'y'의 개수를 비교하는 문제입니다. 다음 규칙을 따른다.

  1. 대소문자를 구분하지 않는다. 즉, 'P'와 'p'는 같은 문자로 처리되며, 'Y'와 'y'도 마찬가지이다.
  2. 'p'와 'y'의 개수가 같다면 true를 반환한다.
  3. 'p'와 'y'의 개수가 다르다면 false를 반환한다.
  4. 문자열에 'p'와 'y'가 모두 없다면, 두 개의 개수가 모두 0이므로 true를 반환한다

문제 풀이: 

class Solution {
    boolean solution(String s) {
        s = s.toUpperCase();

        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
    }
}

1. s = s.toUpperCase();

입력 문자열 s를 모두 대문자로 변환합니다.
이 과정으로 대소문자를 구분하지 않고 'P'와 'Y'를 처리할 수 있게 됩니다.
예를 들어, "pPoooyY"는 "PPOOOYY"로 변환됩니다.


2. s.chars()


s.chars()는 문자열을 각 문자의 Unicode 값(int)로 이루어진 스트림(IntStream)으로 변환합니다.
예를 들어, "PPOOOYY"는 [80, 80, 79, 79, 79, 89, 89]로 변환됩니다.


3. .filter(e -> 'P' == e)

스트림에서 'P'와 같은 값을 가진 문자만 필터링합니다.
'P'의 Unicode 값은 80입니다. 따라서 'P' == e 조건은 80 == e와 동일하게 동작합니다.
예를 들어, [80, 80, 79, 79, 79, 89, 89]에서 'P'만 필터링하면 [80, 80]이 남습니다.


4. .count()

필터링된 결과의 개수를 셉니다.
위 예시에서 [80, 80]의 개수는 2입니다.


5. s.chars().filter(e -> 'Y' == e).count()

동일한 방식으로 'Y'에 해당하는 문자만 필터링하여 개수를 셉니다.
예를 들어, [80, 80, 79, 79, 79, 89, 89]에서 'Y'만 필터링하면 [89, 89]이 남고 개수는 2입니다.
== 비교 연산

'P'와 'Y'의 개수를 비교합니다.
두 개수가 같으면 true를 반환하고, 다르면 false를 반환합니다.

반응형

'Algorithm' 카테고리의 다른 글

핸드폰 번호 가리기  (2) 2023.04.19
정수의 배열 평균 값 구하기  (0) 2023.04.19
정수 내림차 순으로 배치하기  (0) 2023.04.15
자연수를 뒤집어 배열로 만들기  (0) 2023.04.15
Even 과 Odd 를 반환하는 함수  (0) 2023.04.14
Comments