개발하는 kim-hasa

[c++][프로그래머스] 정수 제곱근 판별 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 정수 제곱근 판별

kim-hasa 2021. 8. 5. 19:00

https://programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함

programmers.co.kr

제곱수를 판별하고, 제곱인경우 그 다음 제곱수를 리턴하고 아니면 -1을 리턴합니다.

 

처음에 곱하기로 풀었으나, time over가 계속 나와서 더하기로 변경했습니다.

 

간략히 소개하자면 제곱수는 1,4,9,16..... 이런식으로 증가하게 되는데,

이는 1, 1+3, 1+3+5, .... 이런식으로 증가하게 됩니다.

☆  ☆★  ☆☆★

    ★★   ☆☆★

            ★★★    (이런식입니다...그림표현이 어렵네요)

 

1   1+3   1+3+5 ...

#include <string>
#include <vector>

using namespace std;

long long solution(long long n) {
    long long answer = -1;
    
    long long sqr = 1;  // 제곱근 계산을 위해 증가시킬 변수
    long long count = 3;  // 제곱계산을 더하기로 하기 위해
    
    while(n >= sqr)
    {
        if(n == sqr)        // 제곱수가 되었다면 다음 제곱수 리턴
        {
            answer = n + count;
            break;
        }
        else
        {
            sqr += count;   // 다음 제곱수로
            count += 2;
        }    
    }
    
    return answer;
}