문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면
x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면
-1을 리턴하는 함수를 완성하세요.
제한 사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
1번
if(n == 1) return 4
for(long i=2 ; i<n ; i++) {
if(n/i == i && n%i == 0) return (i+1) * (i+1)
}
return -1
2번 ★
public class 정수제곱근판별 {
public static void main(String[] args) {
System.out.println(solution(121));
}
public static long solution(long n) {
long num = (long)Math.sqrt(n); //121의 제곱근
return (num*num)==n?(num+1)*(num+1):-1;
}
}
<1번과 2번의 차이>
2번의 실행속도는 0.7~0.8 ms 에서 끝나는 반면
1번의 경우 35.94ms ~ 72.00ms 의 속도가 나옵니다.
즉, 성능의 차이가 최대 10배 까지 일어날 수 있습니다.
(참고) Math.sqrt()
(참고) Math.pow()
'Other > 코테 문제' 카테고리의 다른 글
[코테] 문자열 다루기 기본 - "s.charAt(i) <= '9'" (0) | 2021.04.22 |
---|---|
[코테] ★자연수 뒤집어 배열로 만들기 - "Long.toString(n)","num.charAt(i)+""" (0) | 2021.04.22 |
[코테] 제일 작은 수 제거하기 - "num.remove(Collections.min(num))" (0) | 2021.04.22 |
[코테] 정수 내림차순으로 배치하기 - "String.valueOf(n)","Long.parseLong(rs2)" (0) | 2021.04.22 |
[코테] 핸드폰 번호 가리기 - "phone_number.length()-4", "chartAt(i)" (0) | 2021.04.22 |