문제설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항
- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
입출력 예
입출력 예 설명
입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.
입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.
코드 설명
let p = 0, y = 0;
: 변수 p와 y를 0으로 초기화합니다. 이 변수는 각각 문자열 s에서 'p'와 'y'의 개수를 저장하기 위해 사용됩니다.
for(let i of s.toLowerCase()) { ... }
: s 문자열의 각 문자를 순회합니다. toLowerCase() 메서드를 사용하여 모든 문자를 소문자로 변환합니다.
이는 대소문자를 구분하지 않고 'p'와 'y'의 개수를 세기 위함입니다.
if(i === 'p') p++; if(i === 'y') y++;
: 순회 중인 문자 i가 'p'인 경우 p 변수를 1 증가시키고, 'y'인 경우 y 변수를 1 증가시킵니다.
즉, 문자열 s에서 'p'와 'y'의 개수를 세는 과정입니다.
return p === y ? true : false;
: p와 y 변수의 값이 같으면 true를 반환하고, 다르면 false를 반환합니다. 이는 'p'와 'y'의 개수가 같은지를 판단하여 결과를 반환하는 조건식입니다. 조건 연산자를 사용하여 더 간단하게 표현한 것으로, if 문을 사용하여도 같은 결과를 얻을 수 있습니다.
소스코드&결과
소스 코드
function solution(s){
let p = 0, y = 0;
for(let i of s.toLowerCase()){
if(i === 'p') p++;
if(i === 'y') y++;
}
return p === y ? true : false;
}
실행 결과
다른 사람이 짠 코드
function numPY(s){
//함수를 완성하세요
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
- s.toUpperCase() : 주어진 문자열 s의 모든 문자를 대문자로 변환합니다. 이는 대소문자를 구분하지 않고 'P'와 'Y'를 비교하기 위해 수행됩니다.
- .split("P") : 문자열 s를 'P'를 기준으로 분리하여 배열로 만듭니다.
- .length : 분리된 배열의 길이를 구합니다. 이는 문자열 s에서 'P'의 개수를 나타냅니다.
- s.toUpperCase().split("Y").length : 문자열 s를 'Y'를 기준으로 분리하여 배열로 만들고, 해당 배열의 길이를 구합니다. 이는 문자열 s에서 'Y'의 개수를 나타냅니다.
- return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length; : 문자열 s에서 'P'와 'Y'의 개수를 비교하여 개수가 같으면 true를 반환하고, 다르면 false를 반환합니다.
function numPY(s){
return s.match(/p/ig).length == s.match(/y/ig).length
}
- s.match(/p/ig) : 정규표현식 /p/ig를 사용하여 문자열 s에서 'P'를 대소문자 구분 없이 모두 찾아 배열로 반환합니다.
- .length : 찾은 'P'의 개수를 구합니다.
- s.match(/y/ig) : 정규표현식 /y/ig를 사용하여 문자열 s에서 'Y'를 대소문자 구분 없이 모두 찾아 배열로 반환합니다.
- .length : 찾은 'Y'의 개수를 구합니다.
- return s.match(/p/ig).length == s.match(/y/ig).length : 문자열 s에서 'P'와 'Y'의 개수를 비교하여 개수가 같으면 true를 반환하고, 다르면 false를 반환합니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[JAVA] 다트 게임 (2) | 2023.07.28 |
---|---|
[JAVA] 기사단원의 무기 (2) | 2023.07.27 |
[JavaScript] 음양 더하기 (2) | 2023.07.24 |
[JavaScript] 자릿수 더하기 (0) | 2023.07.24 |
[JavaScript] x만큼 간격이 있는 n개의 숫자 (0) | 2023.07.23 |