대문자와 소문자가 섞여있는 문자열 s가 주어집니다.
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution을 완성하세요
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
s | answer |
---|---|
"pPoooyY" | true |
"Pyy" | false |
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.
function solution(s) {
const arr = [...s.toLowerCase()];
const obj = arr.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
return obj['y'] === obj['p'];
}
함수 호출시 필요 인수 s를 arr에 .toLowerCase()
메서드로 소문자를 만든 후
...
인 스프레드 문법으로 문자열을 배열로 만든다.
배열 arr을 .reduce()
메서드로 새로운 오브젝트를 return 받는다.
.reduce()
내부에서는 초기값 {}
을 갖고 반복을 시작하며 초기값 {}
은
배열의 요소를 key로 만들고 acc에 key값과 cur값이 같은 key가 있다면 그 프로퍼티의 value에 +1을 하고,
acc에 key값과 cur값이 같은 key가 없다면 0에 +1 하여 return 하여 새로운 object를 만든다.
완성된 object의 key값이 'y'인 프로퍼티와 'p'의 값을 동등연산자로 비교하여 return 한다.
function solution(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
함수 호출시 필요 인수 s를 toUpperCase()
로 대문자로 만든 후 split()
메서드로 필요한 문자로 '배열'로 만들어 그 길이를 서로 비교하여 return 한다.
split()
메서드는 첫번째 인수로 구분하여 배열로 반환하기에 위와 같은 정답을 작성할 수 있다.