알고리즘/문제풀이

[백준] 10250 - 행렬에 순서 매기기

무하지 2020. 12. 22. 16:46
반응형

문제 : 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분동안 삽질 오지게 함.
반응형