Hayden's Archive
[알고리즘] 프로그래머스 : 문자열 내 p와 y의 개수 본문
알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12916
내가 작성한 코드
처음에는 String을 toLowerCase()를 통해 소문자로 모두 바꾸고 toCharArray()로 char[] 배열로 바꿨다. 그 뒤 char형을 String형으로 바꿔서 문자 "p"와 문자 "y"와 비교하였고 각각 countP와 countY에 저장하여 수를 비교해서 풀었다.
class Solution {
boolean solution(String s) {
boolean answer = true;
char[] sList = s.toLowerCase().toCharArray();
int countP = 0;
int countY = 0;
for(char a : sList) {
Character cha = a;
if(cha.toString().equals("p")) {
countP += 1;
}
if(cha.toString().equals("y")) {
countY += 1;
}
}
if(countP != countY) {
answer = false;
}
return answer;
}
}
그런데 문제를 풀고 나니 꼭 이렇게 풀 필요가 있을까 싶었다. 그래서 다시 풀어봤다.
String 클래스의 charAt() 메소드를 활용하면 문자열에서 n번째 인덱스의 char값을 반환할 수 있다. String을 굳이 char[] 배열로 바꾸지 않아도 된다는 소리다. 그리고 작은따옴표를 써서 == 연산자를 통해 char값끼리 비교하면 된다. 그리고 count는 굳이 countP, countY로 나눌 것 없이 count 변수 하나로 써서 더해가고 빼가서 0인지 아닌지만 따져주면 된다.
class Solution {
boolean solution(String s) {
boolean answer = true;
s = s.toLowerCase();
int count = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 'p') {
count++;
}
if(s.charAt(i) == 'y') {
count--;
}
}
if(count != 0) {
answer = false;
}
return answer;
}
}
다른 사람의 코드를 살펴보니 이런 코드가 있었다. 이걸 람다라고 하는데 나도 들어보기만 하고 제대로 공부해본 적은 없다. 나중에 람다도 공부해봐야겠다.
class Solution {
boolean solution(String s) {
s = s.toUpperCase();
return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
}
}
관련 :
String 클래스의 메소드 https://kutar37.tistory.com/entry/%EC%9E%90%EB%B0%94-String-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C
문자열 비교 https://library1008.tistory.com/37
참고 - 자바의 Wrapper 클래스 https://peulblog.tistory.com/20