문제
리뷰
양의 정수 x의 제곱이 아니라면, sqrt() 결과가 실수가 된다.
따라서 정수로 나오는지 실수로 나오는지 구분해야 한다.
// 제곱근을 long long 으로 형변환 한 것과 비교
sqrt(n) - (long long)sqrt(n)
제곱할 때는 pow() , 제곱근 구하는 sqrt() 가 있다.
pow 도 자료형에 따라 몇 개 더 있으니 정리했다.
#include <cmath>
// x의 y승을 계산하는 pow()
double pow(double x, double y); // 밑수x, 멱수y 순으로 매개변수 넣기
float powf(float x, float y);
long double powl(long double x, long double y);
/*
float 4bytes, double 8bytes, long double 8bytes
*/
내 코드
#include <string>
#include <vector>
#include <cmath>
using namespace std;
long long solution(long long n) {
long long answer = -1; // 양의 정수 x의 제곱이 아니라면 -1
if ( (sqrt(n) - (long long)sqrt(n)) == 0) {
answer = pow(sqrt(n) + 1, 2);
}
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;
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Hacker Rank - Birthday Cake Candles (0) | 2021.01.18 |
---|---|
HackerRank Staircase (0) | 2021.01.18 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2021.01.18 |
Mini-Max sum HackerRank (0) | 2021.01.18 |
[프로그래머스] 스킬트리 c++ (0) | 2021.01.11 |