문제: https://school.programmers.co.kr/learn/courses/30/lessons/12916
✅ 내 풀이
class Solution {
boolean solution(String s) {
String lowercase = s.toLowerCase();
int p = 0, y = 0;
for(int i=0; i<s.length(); i++) {
if (lowercase.charAt(i) == 'p'){
p++;
}
else if(lowercase.charAt(i) == 'y') {
y++;
}
}
return p == y;
}
}
.toLowerCase();
주의할 점은 문자열은 불변(immutable)이기 때문에 원래의 문자열이 변경되는 것이 아니라 새로운 문자열이 생성된다는 점이다.
✅ 다른풀이1
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;
}
}
1. 매개변수 s를 재정의 하면서 변수를 줄임
2. 값의 비교를 ±로 진행하면서 변수를 줄임
내 코드와 비슷하지만 이런식으로 변수를 줄일 수 있는 방법을 생각해보자!
✅ 다른풀이2
//stream 사용
class Solution {
boolean solution(String s) {
s = s.toUpperCase();
return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
}
}
stream은 아직 배우지 않았으나 코드가 간결해보여서 어떤 의미인지 찾아봤다.
따라서, 반환되는 값은 문자열 s에 포함된 'P'와 'Y'의 개수가 동일한지를 나타내는 boolean 값이다.
만약 개수가 동일하다면 true를 반환하고, 그렇지 않다면 false를 반환하게 된다.