728x90
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
- 출력 예시 -
정답 코드
< 내 정답 코드 1 >
class Solution {
public static long solution(long num) {
for (long i = 1; i <= Math.sqrt(num); i++) {
if (i * i == num) {
return (long) Math.pow((i + 1), 2);
}
}
return -1;
}
}
< 내 정답 코드 2 >
class Solution {
public long solution(long n) {
long i = (long) Math.sqrt(n);
return i * i == n ? (long) Math.pow((i + 1), 2) : -1;
}
}
이것을 주의하자!
- 첫 번째 방법보다 두 번째 방법이 더 효율적인 것 같다. 왜냐하면 굳이 for 문을 통해서 작은 숫자들까지 연산할 필요가 없기 때문이다. 단순하게 n 의 제곱근을 int 형으로 구해서 소숫점을 없애고, 구한 제곱근을 곱해서 해당 숫자가 되는지만 확인하면 된다.
- Math.pow(대상 숫자, 지수) 의 반환 타입은 'double' 이다. 따라서 원하는 값으로 형변환 해줘야 한다!
- 제곱을 하기 위해선 Math.pow(), 반대로 제곱근을 하기 위해선 Math.sqrt() 메서드를 사용한다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] (Lv.1) 자연수 뒤집어 배열로 만들기 (0) | 2022.08.31 |
---|---|
[프로그래머스] (Lv.1) 정수 내림차순으로 배치하기 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 제일 작은 수 제거하기 * (0) | 2022.08.30 |
[프로그래머스] (Lv.1) 짝수와 홀수 (0) | 2022.08.30 |
[프로그래머스] (Lv.1) 최대공약수와 최소공배수** (0) | 2022.08.30 |