-
[Python] 백준 10250 ACM 호텔Python_알고리즘 2021. 7. 13. 06:04
문제 바로가기
문제분석
# 각 층에 W개의 방이 있는 H층 건물
# 방 번호는 YXX, YYXX로 하는데, Y는 층수를 뜻하며 X는 엘베에서부터 세었을때 떨어진 거리
# 각 방의 거리는 1로 동일
# 거리가 같을때는 아래층 방 선호
# 따라서 채우는 순서는 엘베로부터 떨어진 거리가 1인 H층의 1층부터 H층까지 채우고,그 다음 떨어진 거리가 2인 H층의 1층부터 H층까지 채우는 식.
# n번째 손님이 배정받아야 하는 방 번호 출력문제
# 파이썬의 표준입력은 input(), 표준출력은 print()함수를 지원한다.
만약 H, W, N이 각각 5, 4, 9라면, 손님이 채워지는 순서는 아래와 같다.
elev. 5 (501호) 4 (401호) 9 (402호) 3 (301호) 8 (302호) 2 (201호) 7 (202호) 1 (101호) 6 (102호) - 9번째 손님은 4층에 위치하며 엘베로부터 2거리만큼 떨어진 402호에 배정받는다.
- 여기서 규칙을 찾을 수 있는데,
① 손님의 번호가 H를 넘어가면 N % H(N번째 손님을 층수로 나눈 나머지)만큼의 층에 머무르고,
② (N // H) + 1만큼 즉, (N번째 손님을 층수로 나눈 몫) + 1만큼 엘베에서 떨어진 곳에 머무른다.
※ 주의할 부분은 ①의 나머지가 0으로 나눠 떨어질 때를 고려해줘야 한다.
문제풀이
t = int(input()) # 테스트 케이스 개수 입력 받음 for i in range(t): # 테스트 케이스로 입력받은 수만큼 for문 반복 h, w, n = map(int, input().split()) # h=각 호텔의 층 수, w=각 층의 방 수, n=몇 번째 손님 floor = n % h # n번째 손님이 머무를 층수 line = (n // h) + 1 # n번째 손님이 머무를 호수 if floor == 0: # 만약 층수가 0으로 떨어진다면 제일 꼭대기에 위치해 있는다는 뜻이므로 floor = h # 머무르는 곳과 층수의 값이 같아지고 line -= 1 # 몫이 하나 늘어난걸 빼줘야 함 print(floor * 100 + line)
# 테스트 케이스 수를 입력값으로 받고 반복문을 돌린다.
# 각 호텔의 층 수와 각 층의 방수, 몇번째 손님인지 입력값으로 받는다.
# n번째 손님이 머무를 층수를 나머지로 구한 후, 호수를 몫에다가 +1을 해줘서 구한다.
# 이 때, 나머지가 0이라면 제일 윗층에 있다는 뜻이므로 층수는 머무르는 곳과 값이 같아지고
# 몫이 하나 늘어난걸 빼주면 호수가 된다.
# n번째 손님의 방이 몇호인지 구하는 것이므로 조건에서 주어진 H와 W(1 ≤ H, W ≤ 99)의 범위를 고려해, 층수에 100을 곱하고 호수를 더해줘 방 번호를 출력한다.
'Python_알고리즘' 카테고리의 다른 글
[Python] 백준 11729 하노이 탑 이동 순서 (0) 2021.07.15 [Python] 백준 1929 소수 구하기 (0) 2021.07.14 [Python] 백준 2609 최대공약수와 최소공배수 (0) 2021.07.11 [Python] 백준 1037 약수 (0) 2021.07.10 [Python] 백준 2869 달팽이는 올라가고 싶다 (0) 2021.07.09