문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12934
아래는 내가 작성한 답이다
using System;
public class Solution {
public long solution(long n) {
long answer = 0;
answer = (long)Math.Pow((long)Math.Sqrt(n), 2) == n ? (long)Math.Pow((long)Math.Sqrt(n) + 1, 2) : -1;
return answer;
}
}
처음 이 문제의 답을 적었을때는 Pow 와 Sqrt 를 모르고 있어서 n 을 2로 나눈뒤 일일이 1씩 빼며 계산을 했는데, 이 경우엔 넘어오는 n이라는 숫자의 크기가 크면 답이 나오는데 시간이 너무 오래걸려 실패했다.
때문에 검색을 해보니 Pow 와 Sqrt 함수를 알게되어서 풀 수 있게 됐다.
Pow 는 Math.Pow (x(제곱할 수), y(제곱 횟수)) 식으로 쓰이며 제곱한 수를 리턴한다.
https://learn.microsoft.com/ko-kr/dotnet/api/system.math.pow?view=net-7.0
Sqrt 는 Math.Sqrt (x) 로 쓰이며 x 의 제곱근을 리턴한다.
https://learn.microsoft.com/ko-kr/dotnet/api/system.math.sqrt?view=net-7.0
둘다 Double형으로 필요에 따라 형변환 해줘야 한다.
만약 다시 작성한다면 아래와 같이 조금 간결하게 작성 할 수 있을거 같다.
using System;
public class Solution {
public long solution(long n) {
long answer = 0;
long x = (long)Math.Sqrt(n);
answer = Math.Pow(x, 2) == n ? (long)Math.Pow(x + 1, 2) : -1;
return answer;
}
}