열렬히.뛰기

10250번: ACM 호텔

알고리즘: 실전 > 백준 단계별로 풀기: 1번 ~ 9번 > 10250번: ACM 호텔

문제

ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.

문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.

아이디어

호텔의 층수 = h. 호텔의 방 칸 수 = w. n번째 손님의 위치 찾기.

호텔의 칸은 아래부터 위로 채워짐. 한 column이 가득 채워지면, 다음으로.

n % h = 가로번호 a 설정. n // h = 세로번호 b 설정

만약 a == 0이면 (즉, 맨 위 번호인 경우)

  • a는 h로 설정.
  • 그렇지 않으면 a = n % h

만약 n % h == 0이면 (즉, 맨 위 번호인 경우)

  • b는 n // h
  • b는 (n // h) + 1

그리고, b에다가 0 붙이기

코드

python
"""ACM 호텔"""
import sys
input = sys.stdin.readline
for _ in range(int(input())):
    h, w, n = map(int, input().split())
    # a 설정하기
    a = n % h
    if a == 0: 
				a = h

    # b 설정하기
    if n % h == 0:
        b = n // h
    else: 
        b = (n // h) + 1

    # XX에 0 붙이기
    if b // 10 == 0: 
        b = str(0) + str(b)

    print("%d%s" % (a, b))