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

프로그래머스 C++ Level. 1 정수 제곱근 판별

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

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

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

using namespace std;

long long solution(long long n) {
    long long answer = -1;
    long long a = sqrt(n);
    if(a > 0 && a * a == n){
        answer = pow(a + 1, 2);
    }
    return answer;
}

pow 함수와 sqrt 함수에 대해 알아보던 중 level 1에도 비슷한 문제가 있길래 풀었다.

long long이라는 자료형을 너무 오랜만에 만나버렸고, 양의 정수의 제곱인지 판별해야하는 조건 때문에 조금 더 고민을 했다. long long이 양의 정수만 다루는 자료형이 아닌 걸로 알고 있기 때문이다.

일단 변수 a를 하나 더 만들어주었고, 이 a가 n의 제곱근일 때

a 와 a를 곱하면 n이 나와야하고, 안나오면 복소수인가?

아무튼 그래서 양의 정수여야한다는 조건을 위해 a가 0보다 크다는 조건을 하나 더 달아주었다.

 

pow(a, b)

a를 b 숫자만큼 제곱해주라는 뜻

 

그리고 처음부터 answer의 값을 -1로 정의해서 else를 거치지 않아도 -1이 출력되도록 했다.

 

사실 반복문을 사용해서 이전의 문제와 동일하게 풀려고 했지만 시간 초과가 발생하여 정답 인정이 되지 않았다.

그렇다면 다른 풀이들을 확인해보자.

 

#include <string>
#include <vector>
#include <math.h>
using namespace std;

long long solution(long long n) {
    long long answer = sqrt(n);

    return powl(answer, 2) == n ? powl(answer + 1, 2) : -1;
}

이렇게 축약 할 수도 있을 것이고

https://sindh718.tistory.com/14

 

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

안녕하세요 뚜디 입니다:) 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 정수 제곱근 판별 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지

sindh718.tistory.com

이런 풀이도 있었다.

그런데 여기서 조금 더 변형을 해보자면

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

using namespace std;

long long solution(long long n) {
    long long answer = -1;
   	for(long long i = 0; i < sqrt(50000000000000); i++){
    	if(pow(i, 2) == n){
        	answer = pow((i + 1), 2);
        }
    return answer;
}

 

이렇게 수정할 수도 있겠다.

(내가 뭐라고 훈수질을 둔다가 아니라 공부하는거다!! ㅠㅠ)

 

728x90
반응형