📝24.01.15
🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12934
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
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;
}
}
}
생각해낸 알고리즘은 내 풀이와 유사하지만, 훨씬 간단하게 구현하였다.
특히 나머지가 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++에서 동일하게 풀이
#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;
}
거의 유사한 풀이
#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;
}