코딩테스트/프로그래머스

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

hyomee2 2024. 8. 2. 00:56

 

 

내가 작성한 코드는 아래와 같다.

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int countP = 0;
        int countY = 0;
        
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) =='p' || s.charAt(i) == 'P')
                countP++;
            if (s.charAt(i) == 'y' || s.charAt(i) == 'Y')
                countY++;
        }
        
        answer = (countP == countY) ? true : false;
        
        return answer;
    }
}

 

다른 사람들의 코드를 보며 내가 생각하지 못했던 점들을 정리해보려 한다.

 

 

예시 코드 1

class Solution {
    boolean solution(String s) {
        s = s.toLowerCase();
        int count = 0;

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'p')
                count++;
            else if (s.charAt(i) == 'y')
                count--;
        }

        if (count == 0)
            return true;
        else
            return false;
    }
}

 

생각해본 지점 (1) toUpperCase() / toLowerCase()

나는 정말 단순하게 조건문 if에 대, 소문자 각각을 집어 넣었다.

하지만 toUpperCase() 또는 toLowerCase()을 사용하면 한 번에 처리할 수 있다.

 

생각해본 지점 (2) count 변수를 1개로

나는 countP, countY을 따로 나누어서 생각해주었는데,

사실 P의 개수와 Y 개수가 같은지만 비교해주면 되기 때문에 1개의 변수로 선언할 수도 있는 걸 깨달았다.

 

 

 

예시 코드 2

class Solution {
    boolean solution(String s) {
        int size = s.length(), pCount = 0, yCount = 0;
        for(int i=0; i<size; i++){
            switch(String.valueOf(s.charAt(i)).toUpperCase()){
                case "P": pCount++; break;
                case "Y": yCount++; break;
                default: break;
            }
        }
        if(pCount==0 && yCount==0) return true;
        return (pCount==yCount) ? true : false;
    }
}

 

생각해본 지점 (1) switch 문

문자에 대한 조건이니까 if문 대신 switch문을 쓸 수 있다는 것을 깨달았다

.

생각해본 지점 (2) 변수 이용하지 않고 return에 직접 표현식 작성

예시 코드와 같이 나도 삼항 연산자를 사용해본 것은 좋았으나,

나는 answer 변수에 넣어주었는데,

위의 코드와 같이 바로 return 해줄 수도 있겠다.