[D+95]항해 99 8일차 (25~28)

ga_ding·2022년 3월 14일
0

TIL

목록 보기
33/55

27. 콜라츠 추측

function solution(num) {
    var answer = 0;
    for (let i=0; i<500; i++) {
        if (num != 1) {
           if (num % 2 === 0) {
              num= num/2
            } else {
                num= num*3+1
               } 
        } else {
            return  i
        }
  }    
    return answer = -1;
}
  1. num이 1이 아닐 경우 1이 될 때까지 max 500번을 반복해주는 반복문을 만들어준다.
  2. 짝수일 경우의 공식 그리고 홀수일 때의 공식을 조건문에 넣어주고
  3. num이 1일 되는 순간 그때의 횟수인 i를 리턴한다.
  4. 이 계산을 500번 반복해도 1이 나오지 않을 경우는 -1을 리턴해준다.

25. 정수 제곱근 판별

  • 틀린 답
function solution(n) {
    
    let sqrt = Math.sqrt(n);
    if (sqrt%1!==0) {
        return -1
    }
    return  Math.pow(sqrt+1,2);
}
  • 맞은 답
function solution(n) {
    
    let sqrt = Math.sqrt(n);
    if (sqrt%1 == 0) {
        return Math.pow(sqrt+1,2)
    }
    return  -1;
} 
  1. Math.sqrt 함수를 활용하여 (ex.Math.sqrt(9); // 3) 변수를 설정했다.
  2. 1로 나누어 떨어지지 않으면 양의 정수가 아님으로 조건문을 사용해서 (양의 정수는 1로 나누었을 때 나머지가 0임을 이용) 양의 정수 일 경우 Math.pow( , ) 함수를 활용하여 (ex.Math.pow(2,2); //2의2승) 값을 리턴했다.
  3. 그리고 양의 정수가 아닐 경우 -1을 return 해줬다.
  • 다른 사람의 풀이
function solution(n) {
    let sqrt = Math.sqrt(n);
    return Number.isInteger(sqrt) ? Math.pow(sqrt + 1, 2) : -1;
}

isInteger를 활용해서 삼항연산자를 이용하여 정수가 맞다면 Math.pow(sqrt + 1, 2)를 아니면 -1을 return해줬다.

let n = 121
function solution(n) {
    var answer = 0;
  if (Math.sqrt(n)%1===0) {
    return (Math.sqrt(n)+1) * (Math.sqrt(n)+1)
  } else {
    return -1
  }
}
console.log(solution(n))

다시 풀어본 문제
제곱을 Math.pow함수가 아닌 그대로 곱해주는 형식으로 작성했다.

26. 제일 작은 수 제거하기

function solution(arr) {
    var answer = [];    
        if (arr.length == 1) {
            answer = [-1]    
        } else {
            arr.splice(arr.indexOf(Math.min(arr)),1)
            answer = arr
        } return answer;        
    } 

이 코드는 코드 실행에서 2문제는 통과했지만, 채점 했을 때 정답처리가 아니였다. 뭐가 문제지..

function solution(arr) {
 let answer= []
 let min = Math.min(...arr)
   if (arr.length === 1) {
     answer= [-1]
   } else{
     answer = arr.filter((num)=>num!=min)
   } return answer
}

알고리즘 조원님 블로그를 참고해 작성한 답안,, 왜 splice는 안되징..

28. 하샤드 수

function solution(x) {
    var answer = 0;
    let arr= x.toString().split("")
    for (let i = 0; i < arr.length; i++) {
        answer+=Number(arr[i])
    } if (x%answer==0) {
        return true
    } else {
        return false;
    }    
}
  1. arr이란 변수를 만들어서 배열열로 바꿔줬다.
    18 => ["1","8"]
  2. arr의length만큼 반복하며 arr[i]들을 더해줬고 그 중에 x로 나누어 떨어지는 경우 true를 아닐 땐 false를 리턴했다.

String과 toString의 차이점이 뭘까

오늘 배운 점

profile
大器晩成

0개의 댓글