본문 바로가기
Java/프로그래머스

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

by 녹녹1 2023. 9. 13.

문제 설명

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

 

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

 

입출력 예
 
입출력 예 설명

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

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

 


수정 전 코드

class Solution {
    public long solution(long n) {
    	long answer = -1;
          for(int i = 1; i < n; i++ ){
	            if(n/i == i){
	                answer = (i+1)*(i+1);
	                break;
	            }
	        }
      return answer;
    }
}

이 코드를 실행하면 통과와 실패가 반반이 나왔다

 

 

코드에는 고쳐야 할 부분이 3가지 있었다.

 

1. 반복문 안에서 i < n 으로 되어있어 제시되는 n이 포함이 되지않았다.

2. 반복문 안의 i를 int형 타입으로 지정해두었기 때문에 제한사항까지의 범위를 다 돌 수 없었다.

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

3. i를 double형 타입으로 지정하고 값을 answer에 담기 위해 long형으로 강제 형변환이 필요했다.

 

수정한 코드

class Solution {
    public long solution(long n) {
    	long answer = -1;
          for(double i = 1; i <= n; i++ ){
	            if(n/i == i){
	                answer = (long) ((i+1)*(i+1));
	                break;
	            }
	        }
      return answer;
    }
}

 


 

기존 코드에서는 일반적인 배열 문제를 풀 때처럼 별 생각을 하지 않고 i를 <로 설정해두었다.

이런 기초적인 부분을 실수하다니 ㅠㅠ

 

이번 문제를 풀이하면서 다른 것도 중요하지만 일단 기초적인 부분을 실수하지 않도록 유의하고 지문을 잘 이해한 뒤 코드를 작성해야겠다고 느꼈다.  

 

 

(ps. 이번 문제에 도움을 준 양 옆의 짱짱걸들 고맙습니다..💛)

 

댓글