데굴데굴

[파이썬] 10250번: ACM 호텔 본문

algorithm/백준

[파이썬] 10250번: ACM 호텔

aemaaeng 2022. 3. 23. 23:23

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net

t = int(input())

for i in range(t):
    h, w, n = map(int, input().split())
    y = n % h
    x = n // h + 1

    if h > n:
        y = n
        x = 1
    elif y == 0:
        y = h
        x = n // h

    if x < 10:
        print("{}0{}".format(y, x))
    else:
        print("{}{}".format(y, x))

글 쓰다가 날아가서 조금 화가 남..^^ 로그인이 풀린 걸 왜 몰랐을까...?


문제에 제시된 h = 6, w = 12, n = 10으로 y와 x를 구하는 과정을 기록해보았다.
글로는 설명이 조금 어려워서 그림으로 그려봤다. 글로 알기 쉽게 설명 잘 해주시는 다른 블로거들 진짜 존경합니당...

x 구하기 (부연설명)
- n을 h로 나눴을 때 나머지가 있는 경우에는 몫 x에 1을 더해줘야 한다. 나머지가 있다는 건 줄을 몇 개 이미 지나고 다음 줄을 지나는 중이라는 것이기 때문에 이를 고려하여 1을 더해줘야 한다.

예시와 같은 경우를 제외하고 1) 손님의 순서(n)가 건물의 높이(h)보다 작을 경우, 즉 n < h일 경우2) n % h이 0일 경우를 따로 고려해주었다.

1)의 경우, n이 h보다 작기 때문에 한 줄을 채 벗어나지 않은 상태가 된다. 따라서 층수 y는 n이 되고 첫 번째 줄에만 머무르기 때문에 호수는 y01의 형태가 된다. 따라서 x는 1로 고정된다.

2)의 경우, 나머지가 0이라는 것은 건물의 꼭대기 층에 배정됐음을 뜻하기 때문에 y는 곧 h가 된다. 또한 나머지가 없기 때문에 몫도 1을 더한 것이 아닌 그 자체로 써야 한다.

마지막 호수 출력 부분에서는 x가 10보다 작을 경우를 따로 둬서 y와 x 사이에 0을 입력하는 코드를 따로 작성해보았다.

Comments