반응형
프로그래머스 1단계 : 문자열 내 p와 y의 개수
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
※ 제한사항
문자열 s의 길이 : 50 이하의 자연수
문자열 s는 알파벳으로만 이루어져 있습니다.
문자열 s는 알파벳으로만 이루어져 있습니다.
※ 입출력 예
s | answer |
---|---|
"pPoooyY" | true |
"Pyy" | false |
// 01
// function solution(s){
// if(s.match(/p/gi).length === s.match(/y/gi).length){
// answer = true;
// } else {
// answer = false;
// }
// return answer;
// }
// 02
function solution(s){
let x = s.toLowerCase();
answer = x.split('p').length === x.split('y').length ? true : false;
return answer;
}
첫 번째 시도는 2, 3, 29, 30번 테스트 케이스가 런타임 오류가 나오는데.. 아마도 s값(문자열)에 p나 y가 없을 때 null값이 나와서 null값은 length함수를 가지고 있지 않기 때문이라고 주워들었습니다.
두 번째 시도는 s를 모두 소문자화시켜 변수x에 저장하고, split()메서드를 통해 p나 y가 없어도 빈배열으로 비교를 할 수 있도록 하였더니 통과되었네요 ㅎㅎ.(맞나..?)
두 번째 시도는 s를 모두 소문자화시켜 변수x에 저장하고, split()메서드를 통해 p나 y가 없어도 빈배열으로 비교를 할 수 있도록 하였더니 통과되었네요 ㅎㅎ.(맞나..?)
※ 다른 사람의 풀이
function solution(s){
return [...s.toLowerCase()].reduce((acc, cur) => {
if(cur ==='p') return acc + 1;
else if(cur ==='y') return acc - 1;
return acc;
}, 0) ? false : true;
}
배열내부에 s변수를 전개하고, 소문자화합니다. reduce()메서드를 사용하여 p가 있다면 +1 , y가 있다면 -1을 하여 만약 p와 y값이 같다면 0이므로 false, 같지 않다면 0이외의 숫자이므로 true가 나옵니다. 삼항연산자를 이용해 true일때 false를, false일 때 true를 반환해줍니다. p와 y가 없다면 acc는 0이므로 true를 반환해줍니다.
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 1단계 : 수박수박수박수박수박수? (2) | 2022.11.09 |
---|---|
프로그래머스 1단계 : 없는 숫자 더하기 (8) | 2022.11.07 |
프로그래머스 1단계 : 음양 더하기 (4) | 2022.11.05 |
프로그래머스 1단계 : 문자열을 정수로 바꾸기 (2) | 2022.11.05 |
프로그래머스 1단계 : 두 정수 사이의 합 (1) | 2022.11.03 |
댓글