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 |
} |