Algorithm/Programmers

프로그래머스[Level 1] - 정수 제곱근 판별 (java)

아이딕 2022. 10. 3. 22:43
728x90
반응형

- 문제 설명

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

 

- 제한 사항

n은 1이상, 50000000000000 이하인 양의 정수입니다.
 
 
-나의 풀이
 
class Solution {
    public long solution(long n) {
		long answer = 0;

		while(answer * answer < n){
			answer++;
		}

		if(answer * answer == n){
			answer++;
			answer*=answer;
		}else{
			answer = -1;
		}
		return answer;
    }
}

 

n이 어떤 수의 제곱인지 알기 위해 필자는 while문을 통해 answer이 n보다 커지거나 같아질 때까지 돌린 후,

answer이 n과 같은지 비교를 해서 n과 같다면, 양의 정수이므로 answer에 +1을 해준 후에 제곱을 하여 return하고,

answer이 n과 같지 않다면, 양의 정수가 아니므로 answer에 -1 을 대입 해준 후에 return해주는 코드를 작성하였다.

 

 

-다른사람의 풀이

 

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;
  }
}

 

필자와 다르게 Math를 이용해서 문제를 풀이 하였다. n의 제곱근(Math.sqrt())을 제곱(Math.pow())하여 n과 같다면, n+1을 제곱하여 return하고 n 과 같지 않다면 -1을 리턴하는 코드를 작성하였다. Math를 사용해서 코드를 작성하니, 확실히 코드도 더 간결하고, 보기도 쉬운 것 같다.

 

문제를 풀 때,  쉽다는 생각을 하고 코드를 작성해 나가지만 문제를 풀고 다른 사람의 풀이를 보면,  항상 많은 걸 깨닫는다. 요즘은 다른사람의 코드를 보는게 더 재밋는거 같다. 노력하자 ㅠ  

728x90
반응형