c++/프로그래머스 1 Lv
[프로그래머스] 정수 제곱근 판별
모든 것을 처음 시작하는 초짜 개발자
2023. 8. 22. 11:37
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항
- n은 1이상 50000000000000 이하인 양의 정수입니다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12934
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이[c++]
#include <cmath>
using namespace std;
long long solution(long long n) {
long long answer = -1;
int n_sqrt=sqrt(n);
if(pow(n_sqrt,2)==n)
return answer=pow(n_sqrt+1,2);
return answer;
}
for문을 사용해서 하나씩 증가해서 사용할 수도 있지만 그러면 작동시간이 너무 오래걸려 시간 초과가 발생한다.
그래서 내가 사용한 방식은 n의 제곱근을 int에 저장한다. 이 때, n이 제곱수이 아니면 소수부분이 잘려나가므로
pow(n_sqrt,2)==n가 성립하지 않게 된다. 제곱수의 경우에는 성립하게 되어 다음 제곱수를 보여주게 된다.