문제 설명
임의의 양의 정수 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. 이번 문제에 도움을 준 양 옆의 짱짱걸들 고맙습니다..💛)
'Java > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] 가운데 글자 가져오기 (2) | 2023.09.15 |
---|---|
[프로그래머스/JAVA] 핸드폰 번호 가리기 (2) | 2023.09.14 |
[프로그래머스/JAVA] 문자 반복 출력하기 (0) | 2023.09.12 |
[프로그래머스/JAVA] 배열의 유사도 (2) | 2023.09.12 |
[프로그래머스/JAVA] 조건에 맞게 수열 변환하기 1 (1) | 2023.09.11 |
댓글