프로그래머스 - 문자열 내 p와 y의 개수 (Level 1)
2024. 1. 2. 01:46ㆍ코딩테스트 정리(자바)
728x90
나의 풀이
: 문자열을 문자의 배열로 변환한 후
대문자와 소문자를 고려하여 p와 y의 개수를 세고
센 두 값을 비교
class Solution {
boolean solution(String s) {
boolean answer = true;
int Pcnt=0;
int Ycnt=0;
for(char ch:s.toCharArray()){
if(ch=='p'||ch=='P')
Pcnt++;
else if(ch=='y'|| ch=='Y')
Ycnt++;
else
continue;
}
if(Pcnt!=Ycnt)
answer=false;
return answer;
}
}
책에서의 풀이
public class Solution {
boolean solution(String s) {
int ps = 0;
int ys = 0;
for (char c : s.toCharArray()) {
switch (c) {
case 'p', 'P' -> ps++;
case 'y', 'Y' -> ys++;
}
}
return ps == ys;
}
}
1.
return ps==ys;
이렇게만 해도 boolean 값으로 반환이 가능함.
굳이 if문으로 비교할 필요가 없음.
책에서의 간결한 풀이
: 문자열을 소문자로 변형 후
전체길이에서 p를 제거한 후의 길이를 빼서 p의 개수를 세고
y도 똑같이 센다.
이렇게 풀면 시간복잡도는 O(n)으로 동일하긴 하지만
문자열이 반환되는 오버헤드가 많아져 직접 구현했을 때 보단 살짝 더 걸리긴 한다.
그러나 간결하고 구현하기 빠르다는 장점이 있다
이 책에서는 같은 O(n)이라면 더 빠르고 정확하게 구현 가능한 풀이를 선호한다.
public class Solution {
boolean solution(String s) {
s = s.toLowerCase();
int ps = s.length() - s.replace("p", "").length();
int ys = s.length() - s.replace("y", "").length();
return ps == ys;
}
}728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 문자열 다루기 기본 (Level 1) (0) | 2024.01.04 |
|---|---|
| 프로그래머스 - 숫자 문자열과 영단어(Level 1) (2) | 2024.01.02 |
| 프로그래머스 - 이진 변환 반복하기 (Level 2) (0) | 2023.12.31 |
| 프로그래머스 - 3진법 뒤집기 (Level 1) (0) | 2023.12.31 |
| 프로그래머스 - 이상한 문자 만들기 (Level 1) (0) | 2023.12.30 |