대문자와 소문자가 섞여있는 문자열에 s에 'p'의 개수와 'y'의 개수를 비교해
같으면 True, 다르면 False를 return
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.
(단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.)
솔직하게 문제를 보고 고민하고, 1주차 배웠던 내용도 찾아보고, 여러가지 검색해보았지만.. 아직 나는 모르는게 있다면 배우고, 공부하는게 더 좋을거 같아서 풀이 영상을 보았다.
function solution(a) {
var answer = true;
// toUpperCase : 모두 대문자로 변환
a = a.toUpperCase();
// "P"가 있으면 + 1
// "Y"가 있으면 - 1
var num = 0;
for (var i = 0; i < a.length; i++) {
if (a[i] === 'P') {
num++;
} if (a[i] === 'Y') {
num--;
}
}
if (num === 0) {
answer = true
} else {
answer = false
}
return answer;
}
해설 영상의 풀이는 다음과 같다.
다른 사람들의 풀이도 보면서 모르는 부분 공부를 했다.
function solution1(b) {
return b.toUpperCase().split("P").length
=== b.toUpperCase().split("Y").length;
}
// 문자열을 분할시켜서 길이 확인
function solution2(c) {
return c.match(/p/ig).length === c.match(/y/ig).length;
}
// match : 포함된 문자를 찾으면 이를 반환함
// i : 대문자, 소문자 상관없이 찾음
// g : 해당하는 문자를 전부 찾음
풀이 2번에 "p" 나 "y"가 없는 경우 error가 난다는 댓글이 많아
혼자 위의 방법으로 다르게 풀이를 생각해 보았다.
function solution3(d) {
const P = (d.match(/p/ig) || []).length;
const Y = (d.match(/y/ig) || []).length;
if (P === null && Y === null) {
return true;
}
if (P === Y) {
return true;
} else {
return false;
}
}
1주차 수업을 들으며 아직 배울게 너무너무 많다는 생각을 했다.
그래도 문제는 찾아보며 풀 수 있을거라고 생각했지만, 많이 부족한 걸 느꼈다.
더 열심히 해야겠다.