문제
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/
Java - 문자열에서 Index로 문자 가져오기
charAt()는 문자열에서 인자로 전달된 Index의 문자 1개를 리턴합니다. char 자료형으로 리턴되며, char를 String으로 변경하려면 String.valueOf()을 사용하여 변경하면 됩니다. charAt()를 사용하는 대신에, St
codechacha.com
나의 풀이
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
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정리
아직 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 |