[백준] 10250 - 행렬에 순서 매기기
문제 : www.acmicpc.net/problem/10250
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
4 | 8 | 12 | 16 |
3 | 7 | 11 | 15 |
2 | 6 | 10 | 14 |
1 | 5 | 9 | 13 |
예를 들어 4 x 4 인 호텔의 경우 위와 같은 순서로 손님들이 들어오게 된다.
이때 14번 손님이 들어오는 방에 대해 살펴보자. 이 방은 2층의 4번째 방이므로
14 = (4 - 1) * 4 + 2 가 된다.
즉 n층의 m번째 방에는 (m - 1) * 4 + n 번째 손님이 들어오게 된다.
우리에게 주어지는 것은 (m - 1) * 4 + n 이므로, 호실을 알려면 여기서 m과 n을 추출해야 한다.
예를 들어 10이 주어지면, 이 10을 4로 나눈 나머지와 몫을 구해서 m과 n을 구할 수 있다.
그러나 만약 n이 4인 경우, 4로 나눴을 때 나머지가 0이 나오므로 이 경우에 대해 예외처리를 해줘야 한다.
그러기가 귀찮으면 더 간단한 방법이 있다.
숫자를 0부터 세는 것이다.
3 | 7 | 11 | 15 |
2 | 6 | 10 | 14 |
1 | 5 | 9 | 13 |
0 | 4 | 8 | 12 |
0번째 손님이 들어오는 방을 0층 0번째 방이라고 하자.
그러면 13번째 손님이 들어오는 방은 1층 3번째 방이다.
이때 13 = 4 * 3 + 1 으로 간단하게 계산되며, n이 4인 경우는 없으므로 ( 0 <= n <= 3 )
나눴을 때 나머지가 몇번째 방인지를 언제나 정확하게 알려준다.
대신 0번째부터 세었으므로 출력할 때는 1을 더해주어야 한다.
주의 : std::endl 빼먹으면 틀렸다고 채점된다. 이거 때문에 30분동안 삽질 오지게 함.