티스토리 뷰

반응형

문제

문제 출처

programmers.co.kr/learn/courses/30/lessons/12916

문제 설명

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

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

제한 사항

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

입출력 예

s answer
pPoooyY true
Pyy false

 

입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

 

풀이

1. 문자열의 각 원소가 p 혹은 y인지 확인

2. p와 y의 개수 비교

class Solution {
    boolean solution(String s) {
        int p=0, y=0;
        //문자열 내 p와 y의 개수를 계산
        for (String ch: s.split("")) {
        	//대소문자 구분 하지 않음
            if (ch.equalsIgnoreCase("p"))
                p++;
            else if (ch.equalsIgnoreCase("y"))
                y++;
        }
        //p의 개수와 y의 개수가 동일한 경우 true return
        //p의 개수와 y의 개수가 다른 경우 false return
        return p==y;
    }
}

 

다른 사람의 풀이

람다식을 이용하여 간단하게 해결할 수 있다.

우선 toUpperCase()를 이용해 모든 문자를 대문자로 바꾼다. (대소문자 구분을 하지 않기 때문에)

chars()는 CharSequence 인터페이스로부터 파생된 String 클래스의 메소드로 IntStream을 반환한다.

filter()를 이용해서 'P', 'Y'인 element들만 반환하여 개수를 세고 비교한다.

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

        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
    }
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함