[프로그래머스] 정수 제곱근 판별

김유원·2024년 1월 15일
0

📝24.01.15

🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12934

문제 설명

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

[C#] 내가 작성한 풀이

using System;

public class Solution {
    public long solution(long n) {
        double s = Math.Sqrt(n);
        
        if(s % 1 == 0) {
            return (long) (s+1) * (long) (s+1);
        } else {
            return -1;
        }
    }
}

[C#] 남이 작성한 풀이

생각해낸 알고리즘은 내 풀이와 유사하지만, 훨씬 간단하게 구현하였다.
특히 나머지가 0이 되지 않으면 양의 정수 제곱근이 아니라는 것을 직접 제곱해서 비교하는 방식으로 구현했다는 점이 가장 눈에 띄었다.

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;
    }
}

[C++] 내가 작성한 풀이

C# 남의 풀이를 보고 C++에서 동일하게 풀이

#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long solution(long long n) {
    long long answer = 0;
    long s = sqrt(n);
    
    answer = (s * s == n) ? (s+1) * (s+1) : -1;
    return answer;
}

[C++] 남이 작성한 풀이

거의 유사한 풀이

#include <string>
#include <vector>
#include <math.h>
using namespace std;

long long solution(long long n) {
    long long answer = sqrt(n);

    return powl(answer, 2) == n ? powl(answer + 1, 2) : -1;
}
profile
개발 공부 블로그

0개의 댓글

관련 채용 정보