개발 공부/TIL(Today I Learned)

99클럽 코테 스터디 3일차 TIL 문자열 내 p와 y의 개수

애해 2024. 7. 24. 13:09
728x90

# 오늘의 학습 키워드 

문자열

 

# 오늘의 문제 

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s 알파벳으로만 이루어져 있습니다.

 

# 나의 풀이방식 

 

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int pCnt = 0;
        int yCnt = 0;
        
        for(int i=0; i<s.length(); i++){
            char chr = s.charAt(i);
            String str = String.valueOf(chr);
            
            if(str.equalsIgnoreCase("p")){
                pCnt ++;
            }else if(str.equalsIgnoreCase("y")){
                yCnt ++;
            }
            
        }
        
      if(pCnt != yCnt ) {
            answer = false;
        }

        return answer;
    }
}

# 다른사람 풀이

class Solution {
    boolean solution(String s) {
        s = s.toUpperCase();

        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
    }
}

# 오늘의 공부 

chars() : 문자열을 구성하고 있는 문자들의 ASCII 코드값을 스트림 형태로 뽑아줌

filter(e->e) : stream 메소드로 조건에 따라 데이터를 선별할때 사용 

 

* filter() 외 stream 관련 메소드들 

limit(n) : 데이터 갯수 제한

skip(n) : 처음 n개를 건너뜀

takeWhile() : 스트림을 순회하다가 조건이 false이면 나머지 데이터를 버림

dropWhile() : 스트림을 순회하다가 조건이 true이면 나머지 데이터를 버림

map() : 스트림 요소 데이터를 변환 

anyMatch() : 조건에 맞는 요소 1개라도 있으면 true면 반환 

allMatch() : 모든 요소가 조건에 맞으면 true 반환

nonMatch() : 모든 요소가 조건에 해당하지않으면 true 반환

findAny() : 조건에 해당하는 데이터를 반환

findFirst() : 조건에 해당하는 첫번째 데이터를 반환

reduce() : 데이터를 연쇄적으로 계산할때 사용

 

# 오늘의 회고 

평소에 사용하던 메소드만 사용하다보니 문제 풀이에 한계가 있는것 같다. 

stream 관련 메소드 좀 공부해놔야겠다.

반응형