제곱수 판별하기 Lv. 0

박영준·2023년 5월 15일
0

코딩테스트

목록 보기
86/300

문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

제한 사항

  • 1 ≤ n ≤ 1,000,000

입출력 예

입출력 예 설명

  • 입출력 예 #1

    • 144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.
  • 입출력 예 #2

    • 976은 제곱수가 아닙니다. 따라서 2를 return합니다.

해결법

방법 1

class Solution {
    public int solution(int n) {
        int answer = 0;
                
        // n의 최대가 1000 000(백만) 이므로, 1000(천) 이 가장 큰 수
        for (int i = 1; i <= 1000; i++) {
            if (i * i == n) {       // 루트로 나눌 때, 정수가 된다면
                answer = 1;
                break;
            } else {
                answer = 2;
            }
        }
        
        return answer;
    }
}
  • break 를 붙여주지 않아서 계속 오류가 떴었다.

    • 해당 조건문에서 break 가 팔요한 이유?
      : 제어문(if문) 자체를 즉시 벗어나기 위해.

    참고: break, continue, return

방법 2

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        Double sqrt = Math.sqrt(n);		// 숫자 n에 루트를 씌워서 변수 sqrt 에 담는다
        
        if(sqrt == sqrt.intValue()) {		// sqrt의 값이 정수라면
            answer = 1;
        } else {
            answer = 2;
        }
        return answer;
    }
}

방법 3

class Solution {
    public int solution(int n) {
    
        return Math.sqrt(n) % 1 == 0 ? 1 : 2;
    }
}
  • n 에 루트를 씌워서 나온 결과가 정수인지/실수인지를 구분하는 것이 핵심
    • Math.sqrt(n) % 1 == 0
      • % 1 : Math.sqrt(n) 가 나누어떨어지는지(0이 되는지) 알아보기 위해 붙인 것.

제곱수 판별하기

profile
개발자로 거듭나기!

0개의 댓글