새소식

Programmers Coding Test/Java

[프로그래머스 120909] Java - 코딩테스트 입문 / 제곱수 판별하기

  • -

 

 

제곱수 판별하기

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

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

 

 

2)  예시

 

 

Result Table
n result
144 1
976 2

 

 

 

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


입출력 예 #2
976은 제곱수가 아닙니다. 따라서 2를 return합니다.

 

 

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int로 합니다.

●   public int solution(int n) {

 

 

 

 

3. 제한사항을 확인하고, 만족하지 않을 경우 예외처리합니다.

●      if(1 > n || n > 1_000_000){
            throw new IllegalArgumentException("n은 1 이상 1000000 이하입니다.");
        }
        

 

 

 

4. 정답이 될 변수 answer를 생성하고 초기화해줍니다.

for 반복문을 이용해서, i * i <= 일 때까지 i를 1씩 증가시키며 반복문을 실행해줍니다.

i * i 가 n (n이 제곱수이면) 이면 answer가 1, 아니면 2로 하고, 최종적으로 answer를 반환해줍니다.

 

●      int answer = 0;
 
        for(int i=0; i * i <= n; i++){
            if(i * i == n){
                answer = 1;
            } else {
                answer = 2;
            }
        }
        return answer;
    }
}



 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int n) {
        if(1 > n || n > 1_000_000){
            throw new IllegalArgumentException("n은 1 이상 1000000 이하입니다.");
        }
        int answer = 0;

        for(int i=0; i * i <= n; i++){
            if(i * i == n){
                answer = 1;
            } else {
                answer = 2;
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 

5)  느낀점

제곱수 여부를 확인할 때, for반복문의 조건식을 i <= n이 아니라, i * i <= n으로하여 반복횟수를 줄인점을 개인적으로 만족스럽게 생각합니다... 후후...너무 기본적인것이었나...

 

 

class Solution {
    public int solution(int n) {
        double sqrt = Math.sqrt(n);
        if (sqrt == (int) sqrt) {
            return 1; // n이 제곱수인 경우
        } else {
            return 2; // n이 제곱수가 아닌 경우
        }
    }
}

좀 더 알아보니 위 코드처럼 Math.sqrt 메소드를 이용하는 방법이 있었습니다.

괄호 안에 들어가는 숫자에 루트를 씌운다고 생각하니 쉽게 이해가 가는 메소드였습니다.

double로 그 변수를 선언하고 Math.sqrt메소드를 실행한 후, 정수로 형변환 했을 때,
정수라면 n이 제곱수가 되는 것이고, 아니라면 제곱수가 아니게 되는 것이죠.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.