[알고리즘] 제곱근 구하기 Math.sqrt()

Bora.K | 권보라·2023년 12월 1일
0

알고리즘

목록 보기
9/11
post-thumbnail

1. 문제

[프로그래머스 Level.1] 정수 제곱근 판별

문제 설명

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

제한 사항

n은 1이상, 50000000000000 이하인 양의 정수입니다.

2. 나의 문제 풀이

(1) 문제 분석

  1. 제곱근 x를 구한다.
  2. n이 양의 정수 x의 제곱이라면? x+1의 제곱 리턴
  3. n이 양의 정수 x의 제곱이 아니라면? -1 리턴

(2) 해결 방법 생각하기

  • 제곱근 구하기
    제곱근을 구하는 방법을 한참 생각하다가 결국 mdn 문서를 찾아봤다.
    Math.sqrt() 문법으로 간단하게 제곱근을 구할 수 있었다.

  • n이 양의 정수 x의 제곱인지 아닌지 판별하기
    제곱인지 아닌지를 판별하기 위해서는 위에서 구한 제곱근 x가 정수인지 소수인지 확인한다.
    정수인지를 판별하기 위해서는 1로 나눈 나머지가 0이면 된다.

(3) 코드 구현


3. 다른 사람의 문제 풀이

다른 사람의 문제 풀이를 보다가 단 한줄로 풀어버린 사람이 있었다.
간단하게 푼다고 해서 꼭 가독성이 좋고 좋은 코드라고는 할 수 없지만 생각해 볼 부분은 있다.

  • parseInt로 정수로 바꿔주기
    나같은 경우 제곱근인지 아닌지 판별하기 위해 if문 내에서 나누기 1을 해서 나머지가 0인지 아닌지를 확인했다. 이 분은 Math.sqrt(n) === parseInt(Math.sqrt(n))으로 좀 더 간단하게 풀었다. 어떤 풀이가 더 효율이 좋은지는 잘 모르겠다. 그래도 이렇게 풀 수도 있구나 싶었다.

4. 오늘 배운 문법

Math.sqrt()

Math.sqrt() 함수는 숫자의 제곱근을 반환한다. 즉, 주어진 숫자에 루트를 씌운다.
만약 숫자가 음수이면 NaN을 반환한다.

parseInt()

parseInt() 함수는 문자열 인자를 파싱하여 특정 진수의 정수를 반환한다.
즉, 문자열로 주어진 수를 정수로 반환한다.
숫자로 넣어도 소수점을 제외한 정수를 똑같이 반환한다.

console.log(parseInt('123'));  // 123
console.log(parseInt(123));   // 123
console.log(parseInt(123.123));   // 123
profile
Frontend Engineers

0개의 댓글