출처) https://school.programmers.co.kr/learn/courses/30/lessons/12934
function solution(n) {
let x=Math.sqrt(n)
if (Number.isInteger(x)){return (x+1)**2}else{return -1}
}
isInteger() 메서드를 처음 알고 사용하게 되었다. isInteger는 number를 받아 그것이 정수라면 true를 return하고 정수가 아닌 실수라면 false를 리턴한다.
Math.sqrt() 메서드를 처음 알고 사용하게 되었다. Math.sqrt() 메서드는 제곱근을 씌우는 것과 같은 역할을 한다. 위 문제에서는 정수 조건과 결합하여 완전제곱수를 판별하는데 사용했다.
출처) https://school.programmers.co.kr/learn/courses/30/lessons/12918
function solution(s) {
if(s.length==4 || s.length==6){
return (typeof Number(s))==="number" ? true : false
} else {return false}
}
문자열 길이를 if문으로 처리한것 까지는 맞았으나 그 이후가 틀렸다.
예상했던 것은 "a123" 처럼 문자가 숫자랑 섞여있으면 Number() 를 사용해도 NaN이 나오고 이는 숫자가 아니므로 이를 기반으로 숫자로만 구성되어 있으면 true를 반환하고 숫자가 아닌 것이 섞여 있으면 false를 반환하도록 삼항 연산자를 사용한 것인데 어째서인지 풀리지 않는다.
이 문제는 아직 못풀었지만 기록해두지 않을 수 없는 충격적인 발견을 하는 계기가 되었다.
바로 NaN 이 숫자라는것! 코딩 공부를 시작한 이후로 단언컨데 가장 큰 충격이다.
Not A Number를 이름으로 달고 있는 주제에 typeof NaN
찍어보면 뻔뻔스럽게도 number라고 나온다.
출처) https://school.programmers.co.kr/learn/courses/30/lessons/12947
//수정 전
function solution(x) {
let num= x.toString().split("")
let divider = num.map((el)=>parseInt(el)).reduce((acc,cur)=>acc+cur)
if( x%divider===0){return true}else{return false}
}
//수정 후
function solution(x) {
let num= (x+'').split("")
let divider = num.map((el)=>+el).reduce((acc,cur)=>acc+cur)
if( x%divider===0){return true}else{return false}
}
두 풀이 모두 동일하게 정답으로 통과되지만 수정 후 풀이가 약간 더 짧다
숫자를 string으로 변환만 하고 싶은 상황이라면 toString() 을 사용할 필요 없이 그냥 숫자에 빈 콤마를 더해주는 것으로 충분하다. ' '
가 아닌 ''
임에 주의하자. 가운데 빈칸은 들어가지 않는다.
반대로 string을 숫자로 변환할때는 parseInt나 Number() 를 사용할것 없이 그냥 string 앞에 +
를 붙여 주는 것으로 충분하다.