[C++] 프로그래머스

[프로그래머스/c++] 제곱수 판별하기

말랑고래 2022. 10. 21. 03:17

<문제>

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

 

<유형>

정수론, 반복문

 

<풀이>

제곱수는 무엇인가.

문제에서 친절하게 알려주고 있다. 예를 들어 2^2 = 4에서 제곱수는 4이다.

이를 판별하기 위해서는 라이브러리를 사용해야한다. 라이브러리를 사용하지 않으면 계산 속도가 좀 더 빠르게 될 수도 있지만... 코드가 길어지며, 경우의 수를 계산해야한다.

 

쉽게 가자.

라이브러리는 cmath이며 sqrt(제곱수)는 루트를 의미한다. 자주쓰는 pow(자연수, 승수)도 알아두면 좋다.

판별하기 위해서는 sqrt(제곱수)가 정수형이 나오는지를 알아내면 된다.

 

<답>

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0;
    if(sqrt(n) == (int)sqrt(n)) {
        answer = 1;
    } else {
        answer = 2;
    }
    return answer;
}

 

그런데, 출력값이 어떻게 나오는지 궁금해서 알아봤다.

 

제곱수가 아닌 976를 예시로 들어서 보자.

cout << sqrt(976);

31.241 이 나온다.

 

그럼 여기서 (int)를 씌우면?

cout << (int)sqrt(976);

31이 나온다.

 

당연한 말이지만 정확한 출력값을 알면 더 이해하기가 쉬울듯 해서 알아보았다.