Algorithm/프로그래머스

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

햄습햄 2021. 10. 29. 08:26

문제 설명

 

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

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

 

 

제한 조건

 

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

 


풀이 과정 (자바)

 

p 개수를 세는 int형 p_cnt, y 개수를 세는 int형 y_cnt를 각각 0으로 초기화했다.

입력받은 s를 char형 배열로 만들어 하나씩 비교했는데

P(p)나 Y(y)일 때, 각각 개수를 늘렸다.

 

문자열 s 내에 p, y가 같은 개수가 있거나 둘 다 아예 없을 때 true를 반환해야 하는데

결국 아예 없는 것도 각각 0으로 값이 같으므로, 이때 true를 반환했다.

그런 경우가 아닐 때는 false를 반환했다.

 

 

결과

 

 


다른 사람의 풀이

 

입력받은 문자열 s를 toUpperCase를 이용해 모두 대문자로 바꿨다.

s.chars().filter를 통해 문자열 s에서 Stream을 생성하여 각각 P의 개수와 Y의 개수를 셌다.

그리고 그 값이 같은지 확인하여 같으면 true, 다르면 false를 반환했다.

 

 

기타

 

다른 사람의 풀이로 진행했을 때, 확실히 속도는 느렸지만, filter를 정말 다양하게 쓸 수 있다는 것을 알았다. 두 값이 같은지 확인하는 동시에 그 값을 반환까지 하는 방법을 생각하지 못했는데 좋은 방법인 거 같다.