23/11/17

Laejun Kim·2023년 11월 17일
1

TIL

목록 보기
38/89

연습문제 풀이

정수 제곱근 판별

출처) https://school.programmers.co.kr/learn/courses/30/lessons/12934

  • 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
    n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

<내 풀이>

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

  • 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

<내 풀이> - 오답

 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

  • 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

<내 풀이>

//수정 전
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 앞에 +를 붙여 주는 것으로 충분하다.

0개의 댓글