임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
n | return |
---|---|
121 | 144 |
3 | -1 |
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
class Solution {
public long solution(long n) {
long answer = -1;
for (long x = 1; x <= Math.sqrt(n); x++) {
if (n == x * x) {
answer = (x + 1) * (x + 1);
}
}
return answer;
}
}
시간 초과 너무 많이 떠서 결국 제곱근 구하는 메서드를 찾아서 해결했는데
아래와 같이 if 문 작성하니까 시간도 짧고 해결되더라...
내 if문 안의 조건이 계산 되는게 오래걸렸나봄 ㅠㅠ
가 아니라 return 되면 끝내거나 아니면 break를 걸어서
중단 시켜야하는데 끝까지 돌게 만드니... 시간 초과되는 문제가 생긴 것이었다.
또한 중간에 n = 이 1일 경우나 4일 경우 등의 경우를 생각하지 않아서 생기는 문제도 있었는데
그런 변수까지 생각하여 아래와 같이 새로 작성해보니 깔끔하게 통과함.
class Solution {
public long solution(long n) {
if(n==1){
return 4;
}
for (long x = 1; x <= n/2; x++) {
if (n == x * x) {
return (x + 1) * (x + 1);
}
}
return -1;
}
}
참고사이트: https://school.programmers.co.kr/learn/courses/30/lessons/12934/solution_groups?language=java
수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스
Math 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있다.
이러한 Math 클래스는 java.lang 패키지에 포함되어 제공된다.
Math.sqrt(double a) ==> a의 제곱근
Math.pow(double a, double n) ==> a를 n번 곱한 값을 리턴한다. =aⁿ