임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
n은 1이상, 50000000000000 이하인 양의 정수입니다.
using System;
public class Solution {
// 정수 n을 입력으로 받아, 어떤 양의 정수 x의 제곱으로 표현될 수 있는지 확인하는 함수
public long solution(long n) {
// 입력 값 n의 제곱근을 구함
long x = (long)Math.Sqrt(n);
// x의 제곱이 입력 값 n과 일치하는지 확인하고, 일치하면 (x+1)의 제곱 반환, 아니면 -1 반환
return (x*x == n) ? (x+1) * (x+1) : -1;
}
}
제곱근 계산:
long x = (long)Math.Sqrt(n);
이 부분에서는 입력 값 n의 제곱근을 계산. 제곱근은 원래 값으로 돌아가는 연산이기 때문에 x를 얻게 됨.
제곱 값 확인 및 반환:
return (x*x == n) ? (x+1) * (x+1) : -1;
이 부분은 계산된 x의 제곱이 원래 입력 값 n과 일치하는지 확인.
일치하면, (x+1) * (x+1)을 반환. 이 부분은 입력 값 n의 다음 큰 정수의 제곱을 의미.
일치하지 않으면, -1을 반환. 이 경우에는 입력 값 n이 어떤 양의 정수의 제곱으로 표현되지 않는 경우.
예를 들어, n이 25일 경우:
x는 5가 됨. (Math.Sqrt(25) = 5)
(xx == n)는 참이므로, (x+1) (x+1)은 36이 되어서 함수는 36을 반환.
이 코드는 제곱근을 이용하여 어떤 양의 정수의 제곱인지를 빠르게 확인하고, 조건에 따라 다음 큰 정수의 제곱을 계산하거나 -1을 반환.
? : 는 C#에서 삼항 조건 연산자(ternary conditional operator)로 불리며, 조건문을 간단하게 표현하는 데 사용
return (xx == n) ? (x+1) (x+1) : -1;
해석해보면
(xx == n)이 참이면, (x+1) (x+1)을 반환합니다.
(xx == n)이 거짓이면, -1을 반환합니다.
즉, 이 코드는 (xx == n)의 결과에 따라 반환값을 설정하는 역할을 함.