본문 바로가기
프로그래머스 C++/Level.0

프로그래머스 C++ Level. 0 제곱수 판별하기

by yeni_0224 2023. 7. 4.
728x90
반응형

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

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 2;
    for(int i = 1; i < n; i++){
     if(i * i == n){
         answer = 1;
     }
    }
    return answer;
}

처음엔 else까지 사용해서 조건에 부합하지 않은 경우 2를 출력하도록 했지만 왜인지 오류를 출력하였다.

정수의 제곱수가 아닌 경우가 훨씬 많으므로 시작부터 answer = 2라고 정의하고, 제곱수인 경우만 찾아서 1을 출력하도록 조건문을 작성해주었다.

 

모든 숫자를 반복하는데 같은 숫자를 곱했을 때 n이 되는 경우에만 조건 안에 들어와 answer = 1을 출력하도록 했다.

 

제곱수 관련한 함수에는 pow와 sqrt가 있는데

첫번째로 pow 함수를 사용한 풀이를 찾았다.

#include <cmath>
#include <iostream>

using namespace std;

int solution(int n) {

    int i = sqrt(n);

    if (pow(i, 2) == n)
        return 1;
    else
        return 2;
}

sqrt 함수를 사용한 풀이는 다음과 같다

#include <bits/stdc++.h>

using namespace std;

int solution(int n) {
    int q = sqrt(n);
    return q * q == n ? 1 : 2;
}

아예 이런 접근도 있었다. answer의 값을 0이 아닌 값으로 정의해서 풀이한 경우도 있었다.

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

using namespace std;

int solution(int n) {
    int answer = sqrt(n);
    answer = (answer * answer == n)? 1:2;
    return answer;
}
728x90
반응형