본문 바로가기

카테고리 없음

[TIL_27] C# 정수 제곱근 판별

정수의 제곱근 판별

문제 설명

임의의 양의 정수 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)
(x*x == n)는 참이므로, (x+1) * (x+1)은 36이 되어서 함수는 36을 반환.
이 코드는 제곱근을 이용하여 어떤 양의 정수의 제곱인지를 빠르게 확인하고, 조건에 따라 다음 큰 정수의 제곱을 계산하거나 -1을 반환.

삼향 조건 연산자

? : 는 C#에서 삼항 조건 연산자(ternary conditional operator)로 불리며, 조건문을 간단하게 표현하는 데 사용

return (x*x == n) ? (x+1) * (x+1) : -1;
해석해보면

(xx == n)이 참이면, (x+1) * (x+1)을 반환합니다.
(x
x == n)이 거짓이면, -1을 반환합니다.
즉, 이 코드는 (x*x == n)의 결과에 따라 반환값을 설정하는 역할을 함.