되는대로 살자

[C언어 기출문제&풀이] 우물 탈출 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 우물 탈출

malu 2010. 11. 2. 21:42
프로그램 명: climbing
제한시간: 1 초

한 마리벌레가 n 인치 깊이의 우물 바닥에 있다. 벌레는 매 분당 u 인치를 오를수 있고 다시 일분을 쉬고 다시 오르고를 반복한다. 쉬는 동안은 d 인치를 미끄러진다.

이 벌레가 우물 밖으로 빠져 나오는데는 얼마나 걸릴까? 분 단위로 계산하고 바닥에서 꼭대기까지 올라오면 다 빠져 나왔다고 간주한다.

입력

여러개의 테스트 데이터가 입력으로 주어진다. 각 테스트 데이터는 3 개의 양의 정수 n,u,d 가 입력으로 주어진다. 이 변수들은 위에서 설명한 그대로 이다. ( d < u , n <100 )

n 이 0 이면 입력의 끝이다.

출력

매 입력당 벌레가 우물을 빠져 나오는 필요한 분을 출력한다.

입출력 예

입력

10 2 1
20 3 1
0 0 0

출력

17
19
출처: East Central North America Region 2002 

풀이 :  유명한 우물 탈출 문제다. 여기서 중요한 것은 올라가는 것과 미끄러지는 차를 이용하되
도착을 하는 것이므로 마지막 날 올라갈 때는 한번에 올라가게 된다는 것이다. 

소스코드 
 
01 #include <stdio.h>
02   
03 int main()
04 {
05     int n,u,d,i,nowpos[100]={0,},count=0;
06     while(1)
07     {
08         scanf("%d %d %d",&n,&u,&d);
09         if(n==0)
10         {
11     for(i=0;i<count;i++)
12         printf("%d\n",nowpos[i]);
13     return 0;
14         }
15         for(i=0;i<=n*3;i++)
16         {
17             if(i%2==0||i==0)
18                 nowpos[count]+=u;
19             else
20       nowpos[count]-=d;
21     if(nowpos[count]>=n)
22     {
23          nowpos[count]=i+1;
24          break;
25     }
26         }
27         count++;
28     }   
29