알고리즘 퀴즈에서 가져온 문제입니다.
아래의 문제를 오라클 SQL로 해결하는데..
시간 제약과 메모리 제약은 무시하시고 답만 나오면 됩니다.
그림과 같이 4 x 4 개의 격자 형태로 배치된 16개의 시계가 있다. 이 시계들은 모두 12시, 3시, 6시, 혹은 9시를 가리키고 있다. 이 시계들이 모두 12시를 가리키도록 바꾸고 싶다.
시계의 시간을 조작하는 유일한 방법은 모두 10개 있는 스위치들을 조작하는 것으로, 각 스위치들은 모두 적게는 3개에서 많게는 5개의 시계에 연결되어 있다. 한 스위치를 누를 때마다, 해당 스위치와 연결된 시계들의 시간은 3시간씩 앞으로 움직인다. 스위치들과 그들이 연결된 시계들의 목록은 다음과 같다.
0 |
0, 1, 2 |
1 |
3, 7, 9, 11 |
2 |
4, 10, 14, 15 |
3 |
0, 4, 5, 6, 7 |
4 |
6, 7, 8, 10, 12 |
5 |
0, 2, 14, 15 |
6 |
3, 14, 15 |
7 |
4, 5, 7, 14, 15 |
8 |
1, 2, 3, 4, 5 |
9 |
3, 4, 5, 9, 13 |
시계들은 맨 윗줄부터, 왼쪽에서 오른쪽으로 순서대로 번호가 매겨졌다고 가정하자. 시계들이 현재 가리키는 시간들이 주어졌을 때, 모든 시계를 12시로 돌리기 위해 최소한 눌러야 할 스위치의 수를 계산하는 프로그램을 작성하시오.
출력
각 테스트 케이스당 한 줄을 출력한다. 시계들을 모두 12시로 돌려놓기 위해 눌러야 할 스위치의 최소 수를 출력한다. 만약 이것이 불가능할 경우 -1 을 출력한다.
편의를 위해
with 초기시계상태 as (
select 12 c0 , 9 c1, 3 c2, 12 c3 , 6 c4 , 6 c5 , 9 c6 , 3 c7 , 12 c8 , 9 c9 , 12 c10 , 9 c11 , 12 c12 , 12 c13 , 6 c14 , 6 c15 from dual
)
원문은 algospot.com/judge/problem/read/CLOCKSYNC |