본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

[프로그래머스] - 정수 제곱근 판별(C#)

by jyppro 2023. 7. 21.

정수 제곱근 판별

오늘 풀어볼 문제는 "정수 제곱근 판별"입니다. 그리고 이번 글은 제가 블로그를 개시한 이후에 100번째로 작성하게 된 글입니다. 중간에 건강 문제로 인해 업로드가 늦어져 조금 딜레이 되긴 했지만, 그래도 100번째 글을 작성하니 뿌듯하네요

그럼 자축은 이쯤하고 바로 문제를 풀어보도록 하겠습니다.

 

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

입출력 예

n return
121 144
3 -1

 

입출력 예1

121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예2

3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

시작 코드

public class Solution {
    public long solution(long n) {
        long answer = 0;
        return answer;
    }
}

 

나의 풀이

using System;

public class Solution {
    public long solution(long n) {
        long x = (long)Math.Sqrt(n);
        return (x*x == n) ? (x+1) * (x+1) : -1;
    }
}

풀이를 살펴보겠습니다. long타입으로 n이 주어지고 새로 선언한 long타입인 x에 Math.Sqrt()를 이용해서 n의 제곱근을 구해 다시 long타입으로 변환시켜 넣어줍니다. 그리고 식을 리턴하게 되는데, 해당 식은 삼항연산자를 사용한 식입니다.

식을 살펴보면 x의 제곱이 n과 같다면 (x+1)의 제곱을 리턴하고 아니라면 -1을 리턴하도록 되어있습니다. 식으로만 보면 이해하기 어려울 수 있으니 수를 대입해서 계산을 한번 살펴보도록 하겠습니다.

 

입출력 예로 들어온 121과 3을 사용해 봅시다. 121이 n으로 들어오면 121의 제곱근인 11이 long타입으로 x에 저장되고

11 * 11 = 121을 계산한 식이 true이므로 (11+1) * (11+1)을 리턴하게 됩니다. 그럼 정답으로 리턴하게 되는 수는 12 * 12로 144가 나오게 됩니다.

 

두번째 예시인 3으로 해보겠습니다. 3의 제곱근을 구하게 되면 정수로 떨어지지 않습니다. 소수점 단위를 가지는 실수로 변하기 때문에 해당 값을 제곱한 값이 n이 되지 않으므로 -1을 반환하게 됩니다.

 

<NEXT>

이번에는 "정수 제곱근 판별" 문제를 풀어보았습니다. 다음에는 "문자열을 정수로 바꾸기" 문제를 풀어보도록 하겠습니다. 감사합니다.