본문 바로가기

정수 제곱근 판별

programmers code review/_step1 2021. 8. 13.
728x90

프로그래머스 1단계 Java 정수 제곱근 판별 문제입니다.


문제 설명

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

 

제한 사항

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

입출력 예

n return
121 144
3 -1

 

입출력 예 설명

입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

문제 해결 방법

① 입력된 정수 n의 제곱근이 정수인지 판별(제곱근의 소수점을 제거한 값과 제곱근을 비교)

    ⑴ 같을 경우 ▶ 제곱근이 정수이므로, 제곱근에 1을 더한 값을 제곱하여 반환

    ⑵ 다를 경우 ▶ 제곱근이 실수이므로, -1을 반환

 

예시)
⑴ n = 9 일 경우
    ⒜ 제곱근의 소수점을 제거한 값 ▶ 3
    ⒝ 제곱근 ▶ 3
    ⒜ = ⒝ 이므로,
    ∴ (3 + 1)² = 16 을 반환
⑵ n = 10 일 경우
    ⒜ 제곱근의 소수점을 제거한 값 ▶ 3
    ⒝ 제곱근 ▶ 3.xxx
    ⒜ ≠ ⒝ 이므로,
    ∴ -1 을 반환

 


더보기
class Solution {
    public long solution(long n) {
        /*
        ① 입력된 정수 n의 제곱근이 정수인지 판별(제곱근의 소수점을 제거한 값과 제곱근을 비교)
        ⑴ 같을 경우 ▶ 제곱근이 정수이므로, 제곱근에 1을 더한 값을 제곱하여 반환
        ⑵ 다를 경우 ▶ 제곱근이 실수이므로, -1을 반환
        */
        return (long)(Math.round(Math.sqrt(n)) == Math.sqrt(n) ? Math.pow(Math.sqrt(n) + 1, 2) : -1);
    }
}

 

※ 위 코드는 해결 방법 중 한가지이며 더 효율적인 코드가 있을 수 있습니다.

 

문제 풀어보기 ▶ https://programmers.co.kr/learn/courses/30/lessons/12934?language=java
 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

'programmers code review > _step1' 카테고리의 다른 글

자연수 뒤집어 배열로 만들기  (0) 2021.08.17
정수 내림차순으로 배치하기  (0) 2021.08.13
제일 작은 수 제거하기  (0) 2021.08.13
짝수와 홀수  (0) 2021.08.13
최대공약수와 최소공배수  (0) 2021.08.11

댓글