되는대로 살자

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

2009~2014/C/C++

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

malu 2010. 11. 4. 21:56
프로그램 명: up_down
제한시간: 1 초

Nikky 와 Byron 체육시간에 게임을 하고 있다.

선생님이 Nikky 에게는 a 보 전진 후에 b 보 후퇴하게 , Byron 에게는 c 보 전진 후 d 보 후퇴하는 작업을 반복적으로 하게 했다.

둘은 같은 보폭을 가지고 한 보폭당 걸리는 시간이 같다.

s 스텝 이후 선생님이 휘슬을 분 경우 둘 중 누가 처음 위치보다 멀리 가 있는가를 알아내는 프로그램을 하라.

입력

5 개의 정수 a,b,c,d,s 가 주어진다.

단, a,b,c,d 는 100 이하의 정수이고 a > b , c > d 이고 s 는 10000 이하의 정수이다.

출력

세 가지 중 하나를 출력한다.
  • Nikky
  • Byron
  • Tied

입출력 예

입력

4
2
5
3
12

출력

Byron

입출력 보충

Nikky 는 12 스텝 후의 상태는 4 - 2 + 4 - 2 즉 첫 위치에서 4 스텝 만큼 떨어지고 Byron 는 5 - 3 + 4 즉 6 스텝 떨어져서 Byron 이 더 멀리 떨어져 있다.
출처:uwaterloo junior

풀이 : 소스에다가 이번엔 주석을 다는 새로운 방식으로 해보겠습니다. ㅋ

 크흑... 좀 어려웠다.

01 int main()
02 {
03     int a,b,c,d,s,asicle,bsicle,ad,bd;
 // 변수 설명 : a,b,c,d,s = 입력값 (a,b)sicle =전진 + 후퇴(주기) a(b)d=a가 총 움직인 거리  
// 변수설명 이해만 다 되면 돌아가는건 알아서 보면 됩니다.
04     scanf("%d%d%d%d%d",&a,&b,&c,&d,&s);
05     asicle=a+b; // 15 
06     bsicle=c+d;  // 17 
07     if(s%asicle==0) ad=(a-b)*(s/asicle); 
// sicle과 총 발자국 수가 나누어 떨어질때는간단하게 한 sicle(주기) 에 전진한 거리와 나눈다.
왜? 그게 움직인 거리니까 ~
08     else

//여기 부터가 짜증나지....
09     {
10         if((s%asicle)<=a) ad=(a-b)*(s/asicle)+(s-asicle);
11         else ad=(a-b)*(s/asicle)+(s-a);
12     }
13     if(s%bsicle==0) bd=(c-d)*(s/bsicle);
14     else
15     {
16         if(s%bsicle<=b) bd=(c-d)*(s/bsicle)+(s-bsicle);
17         else bd=(c-d)*(s/bsicle)+bsicle+(s-c);
18     }
19     if(ad>bd) printf("Nikky");
20     else if(bd>ad) printf("Byron");
21     else if(bd==ad) printf("Tied");
22 }