문제 설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한사항- 문자열 s의 길이 : 50 이하의 자연수
- 문자열 s는 알파벳으로만 이루어져 있습니다.
나의 답
우선 문자열에 대소문자가 섞여 있으므로, 전달 받는 문자열을 모두 소문자로 바꿔준 후 진행하였다.
이후 문자열을 돌면서 p와 y 개수를 저장하고, 마지막에 ternary operator를 사용하여 true / false를 리턴하도로고 했다.
function solution(s){
s= s.toLowerCase();
let p = 0;
let y = 0;
for (let i =0; i < s.length; i++){
if (s[i] == 'p'){ // (s.split('')[i] == 'p')
p++
} else if (s[i] == 'y'){ // (s.split('')[i] == 'y')
y++
}
}
return p === y ? true : false
}
console.log(solution("pPoooyY"));
console.log(solution("Pyy"));
아래는 split()을 사용하지 않았을 때와 사용했을 때의 결과 차이
당연, 새로운 배열을 만들어서 루프를 도는 것보다 문자열 자체에서 배열을 도는 것이 훨씬 빠르다.


다른 사람들의 답 중 참고해 볼만 한 것들
1. split().length를 비교하는 방법
function solution(s) {
return (
s.toLowerCase().split("p").length === s.toLowerCase().split("y").length
);
}
console.log(solution("pPoooyY"));
console.log(solution("Pyy"));
2. 정규식과 match()를 사용하여 길이를 비교
정규식과 match()를 이용하여 p와 y를 개수만큼 배열로 반화하여 길이를 비교
/p/gi 중 gi는 flag이며, i : ignore case / g: global을 의미하여, 문자열 내 모든 문자를 대소문자와 관계 없이 검색하라는 의미가 된다.
function solution(s) {
return s.match(/p/gi).length === s.match(/y/gi).length;
}
console.log(solution("pPoooyY"));
console.log(solution("Pyy"));
[JS] 📚 정규표현식(RegExp) - 이해하기 쉽게 정리 + 응용 예제
정규표현식(Regular Expression) 정규식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용된다. 대표적으로 입력칸에 전화번호나 이메일을 입력하라고 했을때 옳지 않은
inpa.tistory.com
정규식은 아직 어렵다..ㅠㅠ
'TIL(today i learned) > 프로그래머스-코딩테스트' 카테고리의 다른 글
| [연습문제][Lv.1] 하샤드 수 (0) | 2022.11.12 |
|---|---|
| [연습문제][Lv.1] 문자열을 정수로 바꾸기 (0) | 2022.11.12 |
| [연습문제][Lv.1] 정수 제곱근 판별 (0) | 2022.11.12 |
| [연습문제] [Lv.1] 자연수 뒤집어 배열로 만들기 (0) | 2022.11.11 |
| [연습문제] [Lv.1] 자릿수 더하기 (0) | 2022.11.11 |