2021. 1. 17. 16:44ㆍ프로그래머스/Java | Level1
코딩테스트 연습 - 문자열 내 p와 y의 개수
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를
programmers.co.kr
문제 설명 |
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다. |
제한 조건 |
|
입출력 예 |
|
s | answer |
"pPoooyY" | true |
"Pyy" | false |
|
나의 풀이
1. p와 y의 개수를 카운트 할 pCount와 yCount 변수 선언
2. String s를 split으로 쪼개 배열 spelling에 넣음
3. 배열을 loop를 돌려 p/P 와 y/Y의 개수 구함
class Solution {
boolean solution(String s) {
boolean answer = true;
int pCount = 0, yCount = 0;
String[] spelling = s.split("");
for (int i=0; i<spelling.length; i++) {
if (spelling[i].equals("p") || spelling[i].equals("P"))
pCount++;
if (spelling[i].equals("y") || spelling[i].equals(Y"))
yCount++;
}
if (pCount == yCount) answer = true;
else answer = false;
return answer;
}
}
JAVA1 코드 정리
1. 문자 전체를 대문자로 변환
2. 람다식을 이용해서 s.chars(문자 비교)의 ‘P’나 ‘Y’의 count가 같으면 true 출력
class Solution {
boolean solution(String s) {
s = s.toUpperCase(); // 전체 대문자 변환
// 람다식 : 식이 옳으면 true, 다르면 false
return s.chars().filter( e -> 'P' == e).count()
== s.chars().filter( e -> 'Y'==e).count();
}
}
JAVA2 코드 정리
1. 나의 방법과 동일하게 pCount와 yCount 변수 선언
2. if문이 아닌 switch ~ case 문 사용
3. pCount와 yCount가 둘 다 0이면 true를 리턴
4. 마지막 리턴은 삼항연산자를 이용하여 pCount==yCount면 true, 아니면 false 리턴
class Solution {
boolean solution(String s) {
int size = s.length(), pCount = 0, yCount = 0;
for (int i=0; i<size; i++) {
switch(String.valueOf(s.charA(i)).toUpperCase()) {
case "P": pCount++; break;
case "Y": yCount++; break;
defualt: break;
}
}
if(pCount == 0 && yCount == 0) return true; // 둘 다 0일 때 true
return (pCount==yCount)?true:false; // 삼항연산자
}
}
내가 풀때는 비교적 간단한 문제라고 생각하고 룰루랄라 풀었었다.
하지만, 내 코딩은 너무 길고 복잡했다는 것을 다른 사람들과 비교를 할 때 깨달았다.
굳이 split을 써서 배열에 넣을 필요 없이 문자열 그대로 둔 상태에서 charAt이나.
chars를 사용하여 문자 하나씩만을 비교할 수 있었다.
또한 p/P, y/Y를 번거롭게 다 비교할 필요 없이 toLowerCase나 toUpperCase를 사용하
하나로 통일 한 후 비교를 하면 됐을 일이었다.
그리고 람다식을 사용하면 저렇게 코드가 짧아질 수 있다는 것을 알게되었다.
새롭게 알게 된 람다식을 다른 풀이에서도 더 잘 활용하고 싶다.
'프로그래머스 > Java | Level1' 카테고리의 다른 글
[프로그래머스/Java]Level1 - 체육복 (0) | 2021.01.18 |
---|---|
[프로그래머스/Java]Level1 - 나누어 떨어지는 숫자 배열 (0) | 2021.01.17 |
[프로그래머스/Java]Level1 - 소수찾기 (0) | 2021.01.17 |
[프로그래머스/Java]Level1 - 모의고사 (0) | 2021.01.16 |
[프로그래머스/Java]Level1 - 2016년 (0) | 2021.01.16 |