1. 문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
- 제한 사항
- n은 1이상, 50,000,000,000,000 이하인 양의 정수입니다.
2. 풀이 코드
#include <string>
#include <vector>
using namespace std;
long long solution(long long n) {
long long answer = 0;
long long i;
for(i=1 ; i*i <= n ; i++);
if((i-1)*(i-1) == n) answer = i*i;
else answer = -1;
return answer;
}
3. 정리
사용하는 변수는 50,000,000,000,000 값의 범위가 int형이 표현하는 값의 범위를 초과하기 때문에 long long을 사용하며 for문을 이용하여 i 변수를 제곱근+1까지 실행한다. 이후에 i-1 = 제곱근, (i-1)*(i-1)이 n값과 일치 하다면 정답을 저장하는 변수에 i*i = (제곱근+1)* (제곱근+1) 값을 일치하지 않는다면 -1을 대입한다.
전체 시간 복잡도는 for문이 제곱근만큼 반복 하므로 O(√n) 이다.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12934
'Algorithm' 카테고리의 다른 글
| [프로그래머스] 음양 더하기 (0) | 2025.03.07 |
|---|---|
| [프로그래머스] 하샤드 수 (0) | 2025.03.07 |
| 백트래킹(Backtracking) (0) | 2021.05.06 |
| 구현 (0) | 2021.04.27 |
| 그리디 알고리즘(탐욕법) (0) | 2021.04.27 |