본문 바로가기
코딩테스트 연습/JAVA

[프로그래머스] 문자열 내 p와 y의 개수

by 홍차23 2020. 1. 30.

문제설명>

대문자와 소문자가 섞여있는 문자열 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;
        char[] t1 = s.toCharArray();
        int p=0, y=0;
        for(int i=0;i<t1.length;i++){
            if(t1[i] == 'p' || t1[i] =='P') p++;
            else if (t1[i] == 'y' || t1[i] =='Y') y++;
        }
        if(p == y) answer = true;
        else answer = false;
        return answer;
    }
}

리뷰>

toCharArray() 메소드 사용.

문자열을 char 배열로 변환해준다.

배열 길이만큼 for 문을 돌면서 p,y의 개수를 센다.

 

//다른 사람의 풀이

문자열을 toUpperCase() 메소드로 모두 대문자로 만든다. 

chars()메소드로 int 스트림으로 바꾼다.

filter()메소드를 통해서 조건을 확인한다.

count()메소드로 개수를 센다.

 

Java8의 스트림으로 람다를 활용한 방식이다.

스트림은 '데이터의 흐름'으로 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링, 가공할 수 있다. 

즉 함수형으로 병렬처리가 가능하다.

참고: https://futurecreator.github.io/2018/08/26/java-8-streams/

s.chars() // returns a stream of int s that represents the character codes

filter( e-> 'P'==e).count() 

 

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

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

 

댓글