[Javascript] 프로그래머스 : 문자열 다루기 기본
[Javascript] 프로그래머스 Level1 _ 문자열 다루기 기본
👇🏻
👇🏻
시행착오
( + 코드를 작성하면서든 생각들.)
1.
Number()은 앞이든 뒤든 어디든 문자가 들어갈 경우 NaN을 반환하는 점이 생각나서
문자열이 숫자로 변환되면 true, NaN이면 false를 반환하도록 했다.
근데 둘 다 81.3점으로 제출은 안되었다.
(이때까진 내가 뭘 빼먹고 있는지 아무것도 몰랐다....😛)
function solution(s) {
s = Number(s);
return isNaN(s)? false : true;
}
function solution(s) {
//return (s/1 > 0)? true : false; <- 물론 얘도 안된다. 돌아가.
return (Number(s) > 0)? true : false;
}
그런데 말입니다...! 자바스크립트에서 NaN은 정말 숫자가 아닐까요? 👇🏻👇🏼👇🏽
![]() |
NaN은 정말 숫자가 아닐까? 떡하니 Not a Number 라며,,, 콘솔에 typeof NaN을 입력해보면 "number" 라고 나온다. 그렇지만 NaN > 0 "문자열" > 0 로 비교해보면 false로 잘 나오는 것을 확인할 수 있다. |
2.
문제를 제대로 안 읽은 내 잘못이다. 문제를! 제대로! 읽자!
조건에 "문자열 s의 길이가 4 혹은 6이고" 가 떡하니 적혀있다.
하지만 이래도 93.8이다.. 어딘가 하나의 문제가 있다 ㅠㅠ
테스트 11번 에서만 자꾸 걸려서 찾아보니 나만의 문제가 아니었다.
( 👇🏻 혹시 저처럼 답답하실 분들을 위해 작성했습니다!)
* 테스트 11번
원래는 isNaN()만으로도 테스트 통과가 가능했지만, 지수 형식(예를 들어 1e22 = 10의 22승)의 경우
isNaN(1e22) => false를 리턴하기에 요구하는 "문자" 포함 여부를 확인하는데서 실패인 것이다...!
function solution(s) {
return (s.length == 4 || s.length == 6) && (s/1 > 0)? true : false;
}
4.
해결하는 과정에서 every() 함수를 배웠다.
리턴 타입이 boolean이라 return true / false를 명시해주지 않아도 되는 것이 편할 것 같다.
87.5점... 🤬
function solution(s) {
const isNumber = (currentValue) => currentValue > 0;
return (s.split('').every(isNumber))?
(s.length == 4 || s.length == 6)? true : false : false;
}
5.
먼저 길이가 4 나 6이 아니라면 false를 리턴하고
그 이후에 문자열이 포함되어있는지 검사했다. 이렇게 하니 정확성 테스트를 통과할 수 있었다!
(!isNaN() 이전에 currentValue > 0으로 해봤는데 테스트 9, 10에서 막혀서 수정했다)
function solution(s) {
const isNumber = (currentValue) => !isNaN(currentValue);
if(!(s.length == 4 || s.length == 6)){
return false;
} else {
return (s.split('').every(isNumber));
}
}
⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
*** 혹시라도 잘못된 정보가 있다면 언제든지 알려주시면 감사하겠습니다 ! ***