1차시도
처음에 뭔가 문자열이 알파벳이 따로 들어가 있는 게 아니라, 단어 형식으로 들어가있는 것이라고 생각해서 문자열을 잘라서 해봐야겠다는 생각이 들었다. 하지만 우리가 배운 내용에는 없었기에 따로 찾아봤다.
split 함수를 사용하여 문자열을 배열로 변환 후 배열의 크기에서 -1을 하면 특정 문자의 개수를 구할 수 있다. 라는 말이 있어, 1차에는 split함수를 사용했고, 테스트까지만 해도 잘 나왔기에 통과할 줄 알았다.
그러나 정답률이 60%밖에 되지 않았고 테스트에서는 문제점을 발견하기 힘들었기에 테스트 케이스를 추가했다.
문자열이 어느정도의 길이를 넘어가면 오류가 발생하는 것 같았다.
그래서 다른 방법을 시도하기 위해 질문들을 참고하였다.
+) 나중에 보니 테스트 3번은 관계가 없었다...;; 2차시도에서도 오류가 났는데 제출 후 채점을 해보니 통과했다...
2차시도
function solution(s){
var answer = true;
let p = 0;
let y = 0;
for (i = 0; i < s.length; i++){
if (s[i] === "p"|| s[i] === "P"){
p+=1;
}
else if (s[i] === "y"|| s[i] === "Y"){
y+=1;
}
}
if (p===y){
return true;
}
else{
return false;
}
}
내 코드는 너무 길었다. 줄여도 이정도
function solution(s){
var answer = 0;
for (i = 0; i < s.length; i++){
if (s[i] === "p"|| s[i] === "P") {
answer+=1;
}
else if (s[i] === "y"|| s[i] === "Y") {
answer-=1;
}
}
return answer === 0;
}
다른 방법도 찾아보니 match라는 함수가 있었다. 세상엔 너무 많은 문법들이 있었다...;; 언제 다 외우지
3차시도
function solution(s){
return s.match(/p/ig).length === s.match(/y/ig).length;
}
ㅋㅋㅋㅋㅋㅋㅋ아 충격적,,,,, 10줄코드를 단 3줄로 간결하게 줄이다니... 처음에 if else를 안 넣어도 괜찮은가 생각했는데, return에서 ===을 넣음으로써 자동으로 true false를 출력할 수 있게 만든 것이었다.
match 함수는 해당 문자열.match('찾을 단어') 이런 형식으로 사용하며
match 함수를 사용하면 특정 문자를 추출하여 배열로 반환한다.
특정 문자가 없을 경우 빈 배열을 반환하는데 이럴 경우 filter 함수를 사용하여 빈 배열을 제거해야 0을 얻을 수 있다.
filter 함수를 사용하지 않을경우 특정 문자를 찾지 못하면 빈배열 1개를 반환하기 때문에 1을 반환한다.
라고 한다.
[참조 링크]
'캠프 > javascript 문법 종합반' 카테고리의 다른 글
JS 문법 종합반 2주차 코테-1 (0) | 2024.07.25 |
---|---|
JS 문법 종합반 2주차 (0) | 2024.07.25 |
JS 문법 종합반 1주차 (수정2차,,,,,1차본 날아감,,,,,,,,) (0) | 2024.07.22 |