Algorithm/Java

프로그래머스 - 문자열 내 p와 y의 개수 java :: 12916

고고마코드 2022. 6. 10. 14:53
반응형

문제 링크

코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 (programmers.co.kr)


문제 풀이

코드-1

boolean solution(String s) {
    int total = 0;
    for(char ch : s.toLowerCase().toCharArray()) {
        switch(ch) { 
            case 'p': total++; break;
            case 'y': total--; break;
        }
    }
    return total == 0;
}

최종적으로 p와 y의 개수 차이를 구하기 위한 total 이라는 변수를 선언했습니다.
먼저 String 의 toLowerCase()로 활용해 모든 문자열을 소문자로 만들었습니다.

toCharArray()로 char 타입의 배열을 순서대로 탐색합니다.

  • p인 경우에는 total 에서 1일 빼고
  • y인 경우에는 total 에서 1을 더합니다.
  • 만약 p와 y의 개수가 같다면 total은 0이 될 것이고, 같지 않다면 0이 아닌 다른 값이 될 것입니다.

테스트 케이스 실행 속도

  • 🔥 0.03ms

코드-2

boolean solution(String s) {
    return s.replaceAll("[^yY]", "").length() - s.replaceAll("[^pP]", "").length() == 0;
}

public String replaceAll(String regex, String replacement)
정규표현식을 활용해 원하는 문자만 다른 문자로 바꿀 수 있습니다.

  • 대소문자 p를 모두 제거한 문자열과 대소문자 y를 모두 제거한 문자열의 길이가 같다면 p와 y의 개수는 같습니다.

테스트 케이스 실행 속도

  • 🔥 0.1 ~ 0.5ms

코드-3

boolean solution4(String s) {
    return s.chars().filter(ch -> ch == 'p' || ch == 'P').count() == s.chars().filter(ch -> ch == 'y' || ch == 'Y').count();
}

Stream을 활용한 방법입니다.

  • public IntStream chars()
    문자열을 intstream 타입으로 변환합니다.

  • IntStream filter(IntPredicate predicate)
    대/소문자 p 만 필터링한 개수, 대/소문자 y 만 필터링한 개수가 각각 같다면 p와 y의 개수는 같습니다.

테스트 케이스 실행 속도

  • 🔥 1.0 ~ 2.1ms

반응형