티스토리 뷰

알고리즘

자물쇠 풀기 문제

path7inder 2014. 9. 18. 14:55
프로그램 명: lock
제한시간: 1 초

방학이 끝나고 새로운 학기가 시작되었으므로, 당신은 학교에 가야 한다. 그러므로 당신은 학교 사물함 자물쇠를 어떻게 여는지 기억하여야 한다. 자물쇠는 'Master' 브랜드가 만들었다. (사진 참고..) 자물쇠는 40개의 눈금이 있으며, 눈금에는 0부터 39의 수가 쓰여 있다.

자물쇠를 열려면 3개의 숫자를 입력하야 한다. (예: 15-25-8) 자물쇠를 열기 위해서는, 아래 과정을 행하여야 한다..

  • 다이얼을 시계 방향으로 2바퀴 돌린다.
  • 다이얼이 1번째 비밀번호를 가르키면 다이얼을 멈춘다.
  • 다이얼을 반시계 방향으로 1바퀴 돌린다.
  • 다이얼이 2번째 비밀번호를 가르킬 때까지 다이얼을 반시계 방향으로 돌린다.
  • 다이얼이 3번째 비밀번호를 가르킬 때까지 다이얼을 시계 방향으로 돌린다.
  • 자물쇠가 열린다.

(위의 설명에서 '눈금'이라는 글자가 빠졌어도, 이해는 했으리라 믿습니다.)

현재 다이얼이 가르키고 있는 눈금의 숫자와 비밀번호 숫자 3개가 입력될 때, 자물쇠를 열기 위하여 반시계/시계 방향으로 몇 도를 돌려야 할까?

입력

입력은 여러 개의 예제로 이루어진다.

입력 데이터에서 한 개의 줄은 4개의 숫자로 이루어지며, 숫자는 0에서 39 사이다. 첫 번째 숫자는 다이얼이 가리키고 있는 눈금의 숫자이다. 2번째부터 4번째 숫자는 비밀번호이다.

0 0 0 0이 입력되면 프로그램을 종료한다.

출력

각 줄에 다이얼이 돌아가는 각도를 출력한다.

입출력 예

입력

0 30 0 30
5 35 5 35
0 20 0 20
7 27 7 27
0 10 0 10
9 19 9 19
0 0 0 0

출력

1350
1350
1620
1620
1890
1890
출처:Waterloo local 2003.09.20
번역:tncks0121(박수찬)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
using namespace std;
 
int rotateLock(int src, int dest, int dir)
{
    int angle = 0;
    while(src != dest){
        src += dir;
        if(src==-1) src = 39;
        if(src==40) src = 0;
        angle+=9;
    }
    return angle;
}
 
int main()
{
    int start,first,second,third;
 
    cin >> start >> first >> second >> third;
 
    while(start+first+second+third!=0)
    {
    // 1080 = 시계 방향으로 2바퀴(720) + 반시계 방향 1바퀴(360)
    // 각 구간의 각도를 구한다. 더한다.
    // 한 칸이 9도인 점과 구간내에서 0을 지나게 될 경우 자물쇠 현재 위치 값의 조정이 필요함
    // 자물쇠를 돌리는 과정에 대해 오해가 있을 수 있다.
    // 보통 0에서 30로 시계방향으로 간다라고 생각하면 270도라고 생각 할 수 있다.
    // 30이라는 숫자가 0의 위치에 오게 자물쇠를 시계방향으로 돌리는 것이다. 
    // 사실은 90도를 회전시키는 것이다.
        cout << 1080 + rotateLock(start,first,-1) + rotateLock(first,second,1) +
                                                                                   rotateLock(second,third,-1) << endl;
        cin >> start >> first >> second >> third;
    }
}


'알고리즘' 카테고리의 다른 글

Collatz 추측 문제  (0) 2014.09.24
친구수 문제  (0) 2014.09.24
거듭 제곱 테이블 문제  (0) 2014.09.18
설탕공장 문제  (0) 2014.09.18
오실로스코프 문제  (0) 2014.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함