09.05 프로그래머스 코딩테스트

곽민규·2023년 9월 5일
0

코딩테스트 연습

목록 보기
2/12

정수 제곱근 판별

문제 설명

임의의 양의 정수 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;
    }
}
profile
취준생

0개의 댓글