[Java] 자바 알고리즘, "문자열 내 p와 y의 개수"

문자열 내 p와 y의 개수


문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.


예를들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.


제한사항

문자열 s의 길이 : 50 이하의 자연수

문자열 s는 알파벳으로만 이루어져 있습니다.


입출력 예


 s

 answer

 "pPoooyY"

 true

 "Pyy"

 false



입출력 예 설명

- 입출력 예 #1

'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.


- 입출력 예 #2

'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.



나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int pcount=0,ycount=0;
        char[] temp = s.toCharArray();
        
        for(int i =0; i<temp.length; i++) {
            if(temp[i]=='p'||temp[i]=='P') {
                pcount++;
            }else if(temp[i]=='y'||temp[i]=='Y') {
                ycount++;
            }
        }
        if(pcount==ycount) {
            return true;
        }else {
            return false;
        }
    }
}
cs


간단한 알고리즘입니다. 문자열 변수 s에 들어있는 값을 char 배열로 생성하고, for문을 돌면서 배열안에있는 값들이 p,P 인지 y,Y인지만 판별해주고 count를 각각 세어주면 끝입니다.^^


다른사람의 풀이


1
2
3
4
5
6
7
class Solution {
    boolean solution(String s) {
        s = s.toUpperCase();
 
        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
    }
}
cs


return문의 내용을 해석해보자면,,,(영어독해는 아니지만..) 문자열 변수 s에 들어있는 값들을 chars메소드로 스트림으로 변환하고(배열로 변환하는 것과 같은 느낌입니다.) filter메소드의 매개변수 e가 P나 Y랑 같으면 그 같은 개수를 세는 것 같습니다. 상당히 고수신거같아요. 자바를 스트림에 람다에 다 자유자재로 적용하시는 것 보면...  


1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
                defaultbreak;
            }
        }
        if(pCount==0 && yCount==0return true;
        return (pCount==yCount)?true:false;
    }
}
cs


이분은 if문 보다는 switch - case 문을 사용하셔서 푸셨습니다. 위의 분과의 공통점은 toUpperCase 메소드를 이용해서 문자열을 대문자로 모두 바꾸어서 결과를 얻어냈다는 것입니다. 문자열을 모두 대문자로 바꾸는 행동은 위 문제에서는 대소문자를 구분하지 않았지만, 대소문자를 구분하는 경우라면 주의해야할 행동이라고 느낍니다. 맥락은 제코드랑 비슷한것 같아요 ㅎㅎ

댓글

Designed by JB FACTORY