[C언어 코드업 문제풀이] CodeUp 1282 : 제곱수 만들기

코드업 1282번 제곱수 만들기 문제 풀이 해답입니다.

 

1. 문제 설명

 

n이 입력되면 k를 빼서 제곱수를 만들 수 있는 k를 구하고,

그 제곱수에 루트를 씌운 수(제곱근) t를 구하여라.

이 때 k는 여러가지가 될 수 있는데 가장 작은 k를 출력한다.

 

2. 입력

 

n이 입력된다.(0<k<n<=2^31)

 

3. 출력

 

k t를 출력한다. 이 때 k는 여러가지가 될 수 있는데 가장 작은 k를 출력한다.

 

4. 입력 예시

 

34

 

5. 출력 예시

 

9 5

34에서 9를 빼면 25이고, 25의 제곱근은 5이다.

 

6. 문제 풀이

 

#include<stdio.h>
int main(){
    
    int n;
    int k,t;
    scanf("%d",&n);
 
    for(int i = 1; i<=n; i++){
            if ( (n >= i*i) && (n < (i+1)*(i+1)) )
            {
 
                k =n-i*i;
                t = i;
                break;
 
            }
        }
 
    printf("%d %d",k,t);
    return 0;
}
 

 

반복문을 통해 0부터 입력받은 수 까지 제곱근을 구하고 크기를 비교하다보면 time out이 될것입니다.

 

이번 문제는 결국 입력 받은 n에 가장 가까운 제곱근을 찾는 것인데, 

만약 27이란 수가 n으로 주어졌다고 가정할 때 만들 수 있는 제곱근은 5,6,7,8.... 이 겠죠.

여기서 (n >= i*i) 을 만족 하는 수만 찾는다면 1,2,3,4,5 또한 만족하게 됩니다. 

이중에 맞는 값인 5를 찾기 위해 (n < (i+1)*(i+1)) 와 AND 를 취해 준다면 가장 가까운 제곱근을 구할 수 있습니다.

 

댓글()