반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12916
- 난이도 : LV 1
- 소요 시간 : 5분
접근 방법
완전 탐색으로 문자열을 돌면서
p나 P와 같으면 p_cnt의 개수를 더하고
y나 Y와 같으면 y_cnt의 개수를 더해서
p_cnt와 y_cnt의 개수가 같은지 여부를 반환하였다.
- 참고 : https://codechacha.com/ko/java-get-char-in-string/
나의 풀이
class Solution {
boolean solution(String s) {
int p_cnt = 0;
int y_cnt = 0;
for(int i=0; i<s.length(); i++) {
switch(s.charAt(i)) {
case 'p':
case 'P':
p_cnt++;
break;
case 'y':
case 'Y':
y_cnt++;
break;
default:
break;
}
}
return p_cnt == y_cnt;
}
}
다른 사람들의 풀이
class Solution {
boolean solution(String s) {
s = s.toUpperCase();
return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
}
}
- toUpperCase() 나 toLowerCase() 를 통해 대문자나 소문자로 통일을 먼저 해주었다.
- 람다를 활용해 코드 라인을 극소로 줄여서 인상깊었던 풀이
- 그러나 이 코드는
- 플머 실행시간 기준 기본 for 문으로 count 측정보다 100~200배 느림
- replaceAll("정규식","").length() 로 비교한 코드보다 10~20배 느림
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;
}
}
- p는 더하고 y는 빼서 지역변수를 1개만 가져가는 방법이 신박했던 풀이
- 참고 : https://school.programmers.co.kr/learn/courses/30/lessons/12916/solution_groups?language=java
정리
아직 Java랑 좀 낯을 가리는 중이다.
기초 문제들을 풀면서 Java 문법에 익숙해지도록 더 노력해야겠다.
람다를 잘 쓰는 방법과, 메모리를 줄이기 위해 지역변수를 자제하는 방법,
그럼에도 누구나 읽기 쉬운 코드를 짜기 위해 그 사이를 잘 지켜나가는 연습하기 !
반응형
'코딩테스트' 카테고리의 다른 글
[백준] 14172. 넴모넴모 (Easy) - C++ (3) | 2024.07.16 |
---|---|
[백준] 20154. 이 구역의 승자는 누구야?! - C++ (5) | 2024.07.16 |
[프로그래머스] 완주하지 못한 선수 - C++ (0) | 2024.04.08 |
[프로그래머스] 체육복 - C++ (0) | 2024.04.07 |
[프로그래머스] 없는 숫자 더하기 - C++ (0) | 2024.04.04 |