프로그래머스 - 문자열 내 p와 y의 개수 (Level 1)

2024. 1. 2. 01:46코딩테스트 정리(자바)

728x90

나의 풀이 

: 문자열을 문자의 배열로 변환한 후 

대문자와 소문자를 고려하여 p와 y의 개수를 세고

센 두 값을 비교

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int Pcnt=0;
        int Ycnt=0;
        for(char ch:s.toCharArray()){
            if(ch=='p'||ch=='P')
                Pcnt++;
            else if(ch=='y'|| ch=='Y')
                Ycnt++;
            else
                continue;
        }
        if(Pcnt!=Ycnt)
            answer=false;
        return answer;
    }
}

 

 

책에서의 풀이

public class Solution {
    boolean solution(String s) {
        int ps = 0;
	int ys = 0;

        for (char c : s.toCharArray()) {
            switch (c) {
                case 'p', 'P' -> ps++;
                case 'y', 'Y' -> ys++;
            }
        }

        return ps == ys;
    }
}

 

1.

return ps==ys;

 

이렇게만 해도 boolean 값으로 반환이 가능함.

굳이 if문으로 비교할 필요가 없음.

 

 

 

책에서의 간결한 풀이

: 문자열을 소문자로 변형 후

전체길이에서 p를 제거한 후의 길이를 빼서 p의 개수를 세고

y도 똑같이 센다.

 

이렇게 풀면 시간복잡도는 O(n)으로 동일하긴 하지만

문자열이 반환되는 오버헤드가 많아져 직접 구현했을 때 보단 살짝 더 걸리긴 한다.

그러나 간결하고 구현하기 빠르다는 장점이 있다

이 책에서는 같은 O(n)이라면 더 빠르고 정확하게 구현 가능한 풀이를 선호한다.

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

        int ps = s.length() - s.replace("p", "").length();
        int ys = s.length() - s.replace("y", "").length();
        return ps == ys;
    }
}
728x90