[프로그래머스] 문자열 내 p와 y의 개수 Java
문자열 내 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 합니다.
기본코드
class Solution {
boolean solution(String s) {
boolean answer = true;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
문제풀이
이전에 내가 풀기를 한 번 실패하고 넘어갔던 문제를 금일 있을 알고리즘 테스트 준비를 위해 다시 풀어봤다.
그 때 익혔던 .equals()를 사용하니 문제 풀이가 가능했다.
문제에 있어 내가 전개해나갔던 풀이는 다음과 같다.
String s의 문자들을 for문을 통해 배열 pY에 넣는다. 배열 pY의 길이는 문자열 s와 동일하게 설정하였다.
그 후 배열 pY를 한 번 더 for문을 돌리며 각각의 인덱스를 확인하며 p나 P일 경우 countP를 1,
y나 Y일 경우 countY를 1 증가시켰다.
그리고 마지막으로 countP와 countY의 크기가 같으면 boolean answer는 true 아니면 false가 출력되게 만들었다.
class Solution {
boolean solution(String s) {
String[] pY = new String[s.length()];
for(int i = 0; i <s.length(); i++){
pY[i] = s.substring(i, i+1);
}
int countP = 0;
int countY = 0;
for(int i = 0; i <pY.length; i++){
if(pY[i].equals("y") || pY[i].equals("Y")){
countY++;
}else if(pY[i].equals("p") || pY[i].equals("P")){
countP++;
}
}
boolean answer = (countP == countY) ? true : false;
return answer;
}
}
한 번에 테스트가 통과되어 발전한 나의 실력의 뿌듯해 하고 있기를 잠시,
이전에 모범답안으로 가져왔던 코드를 확인하니 내가 불필요한 과정을 한 번 더 만들었다는걸 알게되었다.
굳이 배열 pY를 만들었을 필요 없이, 문자열 s를 s의 길이만큼 for문을 돌면서 charAt으로 뜯어보면 되는거였다..
아직 갈 길이 멀다.
대신 charAt을 써서 나오는 값은 String이 아닌 char로 분류되기에 " "(큰따옴표)가 아닌 ' '(작은따옴표)에 넣어야한다.
Solution.java
class Solution {
boolean solution(String s) {
int countP = 0;
int countY = 0;
for(int i = 0; i < s.length(); i++)
if(s.charAt(i) == 'p' || s.charAt(i) == 'P'){
countP += 1;
}else if(s.charAt(i) == 'y' || s.charAt(i) == 'Y'){
countY += 1;
}
if(countP == countY){
return true;
}else{
return false;
}
}
}