[프로그래머스] 문자열 내 p와 y의 개수
문제
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 메서드를 완성하시오
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 하시오
나의 답안
- p와 y를 count 할 변수를 각각 1개씩 생성
- for문과 if문을 사용해 한 글자씩 대소문자 및 해당 문자 일치 여부 확인하여
일치하는 경우 count변수에 1씩 더함 - 삼항연산자로 true / false 리턴
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++;
} else if(s.charAt(i) == 'y' || s.charAt(i) == 'Y') {
countY++;
}
}
return countP==countY ? true : false;
}
}
모범 답안
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--;
}
return count==0;
}
}
배운 점
- toLowerCase() 메서드를 통해 모두 소문자로 통일시킴
- count변수를 1개만 생성해도 증감연산자(++,--)를 활용하여 p와 y 개수 비교 가능
- count==0 을 리턴하면 삼항연산자 사용할 필요 없이 true / false를 반환할 수 있다
위 세가지 모두 아이디어가 좋아 배워야 할 점이다.
무언가 만들 때 어떻게 하면 효율적이고 간결할지,
좀 더 다른 방향으로 생각해야 한다는 것을 또 한 번 느꼈다.