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

Lellow_Mellow·2023년 1월 19일
1
post-thumbnail

⭐ Lv. 1 - 문자열 내 p와 y의 개수

✅ 문제 설명

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

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

✅ 제한사항

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

✅ 입출력 예

sanswer
"pPoooyY"true
"Pyy"false

입출력 예 #1

  • 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2

  • 'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

✅ 풀이 코드 + 설명

우선 py의 개수를 구하기 이전에 대문자 혹은 소문자여도 상관이 없다는 조건이 있으므로, 해당 문자열을 모두 소문자 혹은 대문자로 변경해준다. 이를 위해 toLowerCase를 사용하였다. 단순하게 접근한다면 for 반복문을 이용해 해당 문자열을 탐색하며 조건문으로 py일때의 개수를 count해주면 되겠지만, 보다 코드를 간결하게 짜고싶어 다른 방식으로 구현하였다.

우선 해당 문자열을 모두 소문자로 변경하고, 이를 배열로 변경하여 forEach를 활용해 배열을 순회하며 각 문자의 개수가 동일한지를 판단할 변수에 변화를 주었다. p일 경우에는 +1을, y일 경우에는 -1을 하여 해당 변수가 0이면 동일한 개수를 가지고 있다고 판단하였다.

function solution(s){
    let result = 0;
    [...s.toLowerCase()].forEach(cur => result += cur === 'p' ? 1 : cur === 'y' ? -1 : 0);
    
    return result === 0 ? true : false;
}

이보다 더 효율적으로 코드를 작성할 수 있다. split을 이용하면 인자로 전달받은 문자 기준으로 나누어 배열로 저장하게 된다. 다시 말해서 해당 문자의 개수 + 1개의 원소를 가진 배열이 되므로, 이를 이용하여 개수가 동일한지 판단이 가능하다.

function solution(s){
    s = s.toLowerCase();
    
    return s.split('p').length === s.split('y').length;
}

profile
잔잔한 물결에서 파도로, 도약을 위한 도전. 함께하는 성장

0개의 댓글