문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
n | return | 설명 | ||
121 | 144 | 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. | ||
3 | -1 | 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. |
문제 풀이
풀이 언어 : C++
#include <string>
#include <vector>
#include <cmath>
using namespace std;
long long solution(long long n) {
long long answer = 0;
double x;
x=sqrt(n);
if(x==(int)x)
{
answer=pow((x+1), 2);
}
else
{
answer=-1;
}
return answer;
}
n이 어떤 "값" x의 제곱일 때 x를 구하는 방법은 간단하다. 이미 C++에서 함수로 제공하고 있기 때문이다. 하지만 이 문제에서는 그 "값"이 양의 정수일 때와 아닐 때를 구분해야한다는 문제가 있다.
우선 제곱근 x를 구하기 위해 sqrt(n) 함수를 사용해준다. 그럼 일단 n이 어떤 값이든 x에는 양의 정수나 양의 실수가 들어가있을 것이다. 이제 x에 들어있는 값이 양의 정수인지 아닌지 확인하기 위해서는 현재 double인 x의 값과 int형으로 형변환한 x의 값이 같은지 확인하면 된다. x==(int)x가 맞는지 확인했을 때 둘이 같다면 처음부터 x에 있던 값은 딱 나누어 떨어져 양의 정수였다는 뜻이다. 따라서 둘이 같다면 pow((x+1), 2)를 하여 결과를 반환하고 그렇지 않다면 -1을 반환하면 된다.
참고사항
sqrt(double x), sqrt(float x), sqrt(long double x)는 모두 매개변수 x로 들어온 숫자에 루트를 씌워서 계산한 값을 반환해주는 일을 한다. 즉, 루트 x를 구해주는 함수, 제곱근을 구해주는 함수다.
...
answer1 = sqrt(9);
double b = 85.4;
answer2 = sqrt(b);
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12934
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Code KATA > 알고리즘 코드카타' 카테고리의 다른 글
[2024.12.22] 하샤드 수 (0) | 2024.12.23 |
---|---|
[2024.12.21] 정수 내림차순으로 배치하기 (0) | 2024.12.23 |
[2024.12.19] 문자열을 정수로 바꾸기 (0) | 2024.12.19 |
[2024.12.18] 자연수 뒤집어 배열로 만들기 (0) | 2024.12.18 |
[2024.12.17] x만큼 간격이 있는 n개의 숫자 (0) | 2024.12.17 |