프로그래머스 Level 1
🔒 정수 제곱근 판별
📚 문제 설명
임의의 양의 정수 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을 리턴합니다.
내가 짠 코드
public class Solution27_3 {
public static long solution(long n) {
long answer = 0;
for (long i = 1; i <= n; i++) {
if (i * i == n) {
answer = (i + 1) * (i + 1);
break;
}
}
if (answer==0)
answer = -1;
return answer;
}
public static void main(String[] args) {
long n = 121;
long n1 = 3;
long n2 = 1;
System.out.println(solution(n));
System.out.println(solution(n1));
System.out.println(solution(n2));
}
}
함수 활용 코드
public class Solution27_3 {
public static long solution(long n) {
long answer = 0;
if (Math.pow((int) Math.sqrt(n), 2) == n) {
answer = (long) Math.pow(Math.sqrt(n) + 1, 2);
}
else
answer = -1;
return answer;
}
public static void main(String[] args) {
long n = 121;
long n1 = 3;
long n2 = 1;
System.out.println(solution(n));
System.out.println(solution(n1));
System.out.println(solution(n2));
}
}
조건이 양의 정수의 제곱이기 때문에 if (Math.pow((int) Math.sqrt(n), 2) == n)에서 int로 꼭 형 변환을 시켜줘야 한다.
int로 형 변환 안 해줄 시 반례)
n=11
11의 제곱근 3.31662479036 * 3.31662479036 = 11이라서 -1로 빠지지 않고 (3.31662479036+1) * (3.31662479036+1) =18.6332495807 이라는 값이 나옴
+
Math.pow와 Math.sqrt의 return type은 double이라 (long)으로 형 변환을 해줬다.
참고
[Java] 거듭 제곱 / 제곱근 구하기 (Math.pow(), Math.sqrt())
Java 거듭 제곱 (Math.pow()) / 제곱근 (Math.sqrt()) 구하기
velog.io
출처:
[프로그래머스] 정수 제곱근 판별-JAVA
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함
velog.io
'Java 알고리즘 공부 (프로그래머스)' 카테고리의 다른 글
| [프로그래머스 Lv1] 하샤드 수 (Java) (0) | 2023.10.03 |
|---|---|
| [프로그래머스 Lv1] 콜라츠 추측 (Java) (0) | 2023.10.03 |
| [프로그래머스 Lv1] 이상한 문자 만들기 (Java) (1) | 2023.09.17 |
| [프로그래머스 Lv1] 문자열 내림차순으로 배치하기 (Java) (0) | 2023.09.17 |
| [프로그래머스 Lv1] 문자열 내 p와 y의 개수 (Java) (0) | 2023.09.16 |