문제 설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.제한사항
- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
해시
p와 y를 key로 가지는 object를 만들어서 풀었다.
function solution(s){
let obj = s.split('').reduce((acc, element) => {
if(element.toLowerCase() === 'p') acc['p']++;
if(element.toLowerCase() === 'y') acc['y']++;
return acc;
}, {'p' : 0, 'y' : 0});
return obj['p'] === obj['y'] ? true : false;
}
그동안 object를 해시맵처럼 사용해왔었는데,
음,, 엄연히 다른데 편하다는 이유로 그냥 썼던 것 같다 😛
이제는 제대로 map을 만들어 사용해야겠다!
<function solution(s){
let map = new Map();
map.set('p', 0);
map.set('y', 0);
s.split('').forEach((element) => {
if(element.toLowerCase() === 'p') map.set('p', map.get('p') + 1);
if(element.toLowerCase() === 'y') map.set('y', map.get('y') + 1);
});
return map.get('p') === map.get('y') ? true : false;
}
.
.
.
효율도 이렇게 좋아질 일이었나🙄