-
[자바(JAVA)] 문자열 내 p와 y의 개수 (toLowerCase)프로그래머스/자바(JAVA) 2023. 6. 17. 09:14728x90
✅ 내 풀이
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();
String lowercase = new String(str).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 = s.toUpperCase();: 주어진 문자열 s를 대문자로 변환합니다. 이는 문자열의 모든 문자를 대문자로 통일시킵니다. 이 작업은 두 번째 줄에서 사용되는 s.chars() 메서드를 통해 문자열을 문자 스트림으로 변환하기 전에 수행됩니다.
- s.chars().filter( e -> 'P'== e): 문자열 s를 문자 스트림으로 변환한 후, 해당 스트림에서 문자 'P'와 일치하는 요소만 필터링합니다. filter() 메서드는 주어진 조건에 맞는 요소만을 선택하여 새로운 스트림을 반환합니다.
- .count(): 이전 단계에서 필터링된 문자 스트림의 요소 개수를 계산하여 반환합니다. 즉, 문자열 s에서 문자 'P'의 개수를 세는 것입니다.
- s.chars().filter( e -> 'Y'== e): 문자열 s를 문자 스트림으로 변환한 후, 해당 스트림에서 문자 'Y'와 일치하는 요소만 필터링합니다.
- .count(): 이전 단계에서 필터링된 문자 스트림의 요소 개수를 계산하여 반환합니다. 즉, 문자열 s에서 문자 'Y'의 개수를 세는 것입니다.
- ==: 앞서 계산된 'P'의 개수와 'Y'의 개수를 비교합니다.
따라서, 반환되는 값은 문자열 s에 포함된 'P'와 'Y'의 개수가 동일한지를 나타내는 boolean 값입니다. 만약 개수가 동일하다면 true를 반환하고, 그렇지 않다면 false를 반환합니다.
728x90'프로그래머스 > 자바(JAVA)' 카테고리의 다른 글