1주 1알고리즘 문제 풀기 시자악👆
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.
split
메서드를 통해 알파벳 별로 나뉘어진 배열을 만든다.p만 담는 배열
, y 만 담는 배열
을 만든다.true
를 리턴할 수 있도록 includes
메서드로 분기 시킨다. length
를 비교하여 true/false
로 분기 시켰다. function solution(s){
let answer = true;
// 1. 먼저 s string 을 `split` 메서드를 통해 알파벳 별로 나뉘어진 배열을 만든다.
const sArray = s.split('');
// 2. 그 배열에서 각각 필터를 돌려서 `p만 담는 배열`, `y 만 담는 배열`을 만든다.
const pFilter = sArray.filter((chr) => (chr === 'p') || (chr === 'P'));
const yFilter = sArray.filter((chr) =>(chr === 'y') || (chr === 'Y'));
// 3. p, y 모두 하나도 없다면 `true`를 리턴할 수 있도록 `includes` 메서드로 분기 시킨다.
if ((!s.includes('p' || 'P')) && (!s.includes('y' || 'Y'))) {
answer = true;
}
// 4. 두 배열의 `length` 를 비교하여 `true/false`로 분기 시켰다.
else if (pFilter.length === yFilter.length) {
answer = true;
} else if (pFilter.length !== yFilter.length) {
answer = false;
}
return answer;
}
match
메서드를 사용하는 답안string.match(/찾고자하는 char (혹은 range로 표현)
/ig(대소문자 포함 g만쓰면 찾고자하는char에 맞추어 대문자면 대문자, 소문자면 소문자를 찾음), gi라고 써도 동일하게 작동)
) 하면 배열을 리턴한다.
/[A-Z]/g
: A부터 Z까지 대문자만 찾기/[a-z]/g
: A부터 Z까지 소문자만 찾기/[a-z]/ig
or /[A-Z]/ig
or /[A-Z]/gi
or /[a-z]/gi
: A부터 Z까지 소문자/대문자 다 찾기 function numPY(s) {
// 즉 소,대문자를 포함한 p 배열의 길이와 y배열의 길이가 같으면 true 아니면 false를 return 하는 깔끔한 함수가 완성된다.
return s.match(/p/ig).length == s.match(/y/ig).length;
}
split
메서드를 사용하는 답안-P를 기준, Y를 기준으로 나뉜 배열의 길이가 똑같은 것이 즉 동일 한 수 의 P와 Y를 가지고 있는 것이므로 위의 예시와 동일하게 true아니면 false를 리턴하게 된다.
function numPY(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}