되는대로 살자

[C언어 기출문제&풀이] 통나무 쌓기 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 통나무 쌓기

malu 2010. 11. 2. 17:45

프로그램 명: log
제한시간: 1 초

안정된 형태로 통나무를 쌓기 위해서는 아래 그림과 같이 최하단 부터 쌓기 시작하여 한 층 위로 올라갈 때 마다 통나무 개수가 한 개씩 줄어 들도록 해야 한다. 이 때 최상단에 놓인 통나무의 수는 바로 아래 층의 통나무 개수보다 한 개 이상 적다.

N 개의 통나무를 안정된 형태로 쌓으려고 할 때 , 최 상단에 놓일 수 있는 통나무의 개수와 이 때 최하단에 놓이는 통나무의 개수를 구하는 프로그램을 작성하시오. 단, 가능한 최하단에 놓이는 통나무의 수를 최소로 하는 답을 구하여 야 한다.

입력 형식

통나무의 개수가 입력된다. 통나무의 개수는 300 이하의 자연수이다.

출력 형식

최 하단과 최 상단에 놓일 통나무 수를 출력한다.

입출력 예

입력

18

출력

6 3

입력

19

출력

6 1
출처: 서울 지역 기출
풀이 : 문제의 규칙을 찾는다. 
소스코드 
01#include <stdio.h>
02  
03int main()
04{
05    int n,i,j,sum=0;
06    scanf("%d",&n);
07    for(i=1;i<=n;i++)
08    {
09        for(j=i;j>0;j--)
10        {
11    sum+=j;
12    if(sum>=n)
13    {
14        if(sum==n)
15            printf("%d %d",i,j);
16        else
17            printf("%d %d",i,n-(sum-j));
18        return 0;
19    }
20        }
21        sum=0;
22    }
23}