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가 성립하지 않게 된다. 제곱수의 경우에는 성립하게 되어 다음 제곱수를 보여주게 된다.