[프로그래머스]Algorithm_23.04.03

윤성해·2023년 4월 3일
0

알고리즘

목록 보기
14/22
post-thumbnail

💡 Number.isIntager() , Math.sqrt , Math.pow ()

정수 제곱근 판별

문제

내 생각과 풀이

  1. n 이 x의 제곱과 같다.
  2. 그렇다면 (x + 1)을 제곱한 값 리턴
  3. 아니면 -1 리턴
function solution(n) {
    const answer = 0;
    if (n === x * x) {
        answer= (x + 1) + (x + 1)       
    } else {
        answer = -1
    }
}

레퍼런스

  • 제곱근 : 제곱의 기준이 되는 숫자
  • i 를 하나씩 늘려나가면서 i의 제곱값들을 계속 구할 것임
  • 제곱의 값이 현재 n의 값과 동일하게 된다면, i의 값이 n의 제곱근
    1.
function solution(n) {
    let answer = -1;
    for(let i=1; i*i <= n; i++){ // i*i(i의 제곱값이 n과 동일해질때까지)
        if(i*i ===n){
            // 제곱근을 찾은 경우
            answer = i + 1;
            return answer * answer 
          // 방법 1. return (i + 1)*(i + 1)
          // 방법 2. return (i + 1) ** 2 -> 거듭제곱연산자! 앞                     에는 제곱할 숫자, 뒤는 몇제곱 할건지 넣어주기
        }
    }
    //제곱근을 찾지 못한 경우
    return answer;
}

2. 메서드

소수점이 없는 정수라면 제곱근이 맞다. 소수점이 있다면 제곱근이 아니다.

  1. Number.isIntager() : 정수인지 아닌지 판단하는 메서드
    인자값으로 들어오는 데이터가 정수인지 아닌지 불린타입으로 리턴해줌.
  2. Math.sqrt : 해당 슷자가 제곱이라면 제곱근을 찾아서 변수에 담아주는 메서드
  3. Math.pow (sqrt + 1 , 2) : 앞 인자를 뒤인자만큼 제곱하는 메서드
function solution(n) {
  let sqrt = Math.sqrt (n);//해당 슷자가 제곱이라면 제곱근을 찾아서 변수에 담아주는 메서드
    if(Number.isInteger(sqrt)){
        // 정수인 경우 (제곱근이 있는 경우)
        return (sqrt + 1) ** 2
        // return Math.pow (sqrt + 1 , 2)-> 앞 인자를 뒤인자만큼 제곱하는 메서드
    }else {
        //정수가 아닌경우 (제곱근이 없는경우)
        return -1 
    }
}

💡 정수를 판별하는 법은 Number.isInteger 메서드도 있지만,
나머지 연산자를 활용해도 좋을 것 같다. 정수는 1로 나누었을 때 항상 나머지가 0이므로, 아래처럼 써주기 가능!

if (sqrt % 1 === 0){
	return (sqrt + 1) ** 2
}
profile
Slow and steady wins the race.

0개의 댓글