[자바(JAVA)] 문자열 내 p와 y의 개수 (toLowerCase)

Noh Jihyeon·2023년 12월 14일
0
post-thumbnail

문제: 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은 아직 배우지 않았으나 코드가 간결해보여서 어떤 의미인지 찾아봤다.



  1. s = s.toUpperCase();: 주어진 문자열 s를 대문자로 변환하면서 통일시킴.
    (두 번째 줄에서 사용되는 s.chars() 메서드를 통해 문자열을 문자 스트림으로 변환하기 전에 수행됨)
  2. s.chars().filter( e -> 'P'== e): 문자열 s를 문자 스트림으로 변환한 후, 해당 스트림에서 문자 'P'와 일치하는 요소만 필터링을 진행하여 새로운 스트임을 반환함.
  3. .count(): 이전 단계에서 필터링된 문자 스트림의 요소 개수를 계산하여 반환함(즉, 문자열 s에서 문자 'P'의 개수를 카운팅)
  4. s.chars().filter( e -> 'Y'== e): 문자열 s를 문자 스트림으로 변환한 후, 해당 스트림에서 문자 'Y'와 일치하는 요소만 필터링함.
  5. .count(): 이전 단계에서 필터링된 문자 스트림의 요소 개수를 계산하여 반환함(즉, 문자열 s에서 문자 'Y'의 개수를 카운팅)
  6. \==: 앞서 계산된 'P'의 개수와 'Y'의 개수를 비교한다.

따라서, 반환되는 값은 문자열 s에 포함된 'P'와 'Y'의 개수가 동일한지를 나타내는 boolean 값이다.
만약 개수가 동일하다면 true를 반환하고, 그렇지 않다면 false를 반환하게 된다.

profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글