프로그래머스/Java | Level1

[프로그래머스/Java]Level1 - 정수 제곱근 판별

뿌꾸 빵 2020. 11. 3. 12:04
728x90
반응형
 

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

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

programmers.co.kr

문제 설명
임의의 양의 정수 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을 리턴합니다.

  

나의 풀이

1. 제곱근 판별 Math.sqrt(n) 함수 사용하여 제곱근 판별

2. n의 2제곱을 정수로 바꾼 것의 제곱이 n과 같으면 n은 제곱근, 같지 않으면 -1 리턴

3. Math.pow를 이용하여 n+1의 제곱근을 구함

class Solution {
	public long solution(long n) {
		if(Math.pow((int)Math.sqrt(n), 2) == n)
			return (long) Math.pow(Math.sqrt(n) + 1, 2);
		return -1;
	}
}

 

JAVA1 코드 정리

1. n이 1이면 4 리턴 (2의 제곱근 = 4)

2. 2부터 n의 값까지 반복문 실행

3. n을 i로 나눈 값이 i와 같고 n을 i로 나눈 나머지가 0이면 (i+1)의 제곱을 구함

4. 아니면 -1 리턴

class Solution {
  public long solution(long n) {
      if(n==1){
          return 4;
      }
      for(long i=2;i<n;i++){
          if(n/i == i && n%i ==0){
              return (i+1)*(i+1);
          }
      }
      return -1;
  }
}
제곱근 같은 경우는 함수가 너무 잘되어있다.
sqrt를 이용하여 제곱근의 값을 구하고, pow 함수를 이용하여 제곱을 구하면 된다.
이런 다양한 함수 덕분에 자바의 코딩이 훨씬 간결해지긴 하나
알고리즘 공부를 위해선 함수를 많이 사용하지 않고 코딩하는 법을 터득하는 게 도움이 될 것 같다.
728x90
반응형