Algorithm & Data Structure/문제 풀이

[10250] ACM 호텔 (Python)

뭉지(moonz) 2021. 6. 15. 22:26
반응형
풀기 힘들었던 문제만 tistory에 올리고 있습니다. 더 많은 문제풀이 코드는 github에 있습니다:)

https://www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

분류

  • 구현
  • 사칙연산
  • 수학

입력예제1

2

6 12 10

30 50 72

 

출력예제1

402

1203

 

생각 정리

  • N은 손님이 방문한 번째 수, H는 높이(층 수), W는 가로(호실 수) 이다.
  • 층과 호수에 대한 수학적 규칙을 발견해야 한다. (나는 이렇게 풀지 못했다지..)
  • 손님이 머물 호수는 N을 전체 층수로 나눈 몫이다. 
    • 예를 들면, 만약 전체 5층일 때, 20번째 온 손님은 20/5 == 4번째 호수! 즉 4바퀴를 돌고 온 호수이다.
      그런데, 몫이 0일 때 1호실이니까 +1을 해줘야한다.
  • 손님이 머물 층 수는 N을 전체 층수로 나눈 나머지이다. 
    • 예를 들면, 만약 전체 6층일 때, 20번째 손님은 20%6 == 2번째층! 6층 한바퀴,6층 두바퀴, 6층 세바퀴 째 2번째 층! 그림으로 봐보면

다시 예를 들어보자. 만약 전체 6층일 때, 12번째 손님은 12%6==0? 0번째 층..? 예외가 있다!
만약 나머지가 0일 때 생각해보면 그 층의 마지막 층인 것이다.(위 그림을 참고) 그러므로 floor는 0이 아닌, 6번째 층, 즉 H가 되겠다. 
그럼 호수는? 이미 12//6 + 1 로 계산해줬지만,
예외의 경우, 다음으로 넘어가지않으므로 -1을 다시 해줘야한다.

if floor == 0:
	floor = H
	ho -= 1

 

전체 코드

T = int(input())

for t in range(T):
    H, W, N = map(int,input().split()) # 전체층수, 전체 호수, 방문 순서
    floor = N % H # 손님이 사용할 층수
    ho =  N // H +1 # 몫이 0일 때 1호실이니까 +1을 해줘야함
    # 예외 - 높이가 딱 맞아 떨어질 때 
    if floor == 0:
        ho -= 1
        floor = H # 0이 아닌 가장 꼭대기층!
    print(floor*100+ho) 

 

반응형