반응형
문제 : www.acmicpc.net/problem/10250
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분동안 삽질 오지게 함.
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 1011 - 나를 알파 센타우리로 보내줘 (0) | 2020.12.24 |
---|---|
[백준] 2775 - 재귀함수로 풀어보자 (0) | 2020.12.23 |
[백준] 2869 - 달팽이는 올라가고 싶다. (0) | 2020.12.19 |
[백준] 1193 - 좌표계 도입 (0) | 2020.12.17 |
[백준] 2292 - 벌집 구조 (0) | 2020.12.17 |