티스토리 뷰
[Python] 백준 알고리즘 온라인 저지 10250번 : ACM 호텔
Python3 코드
t = int(input())
for i in range(t):
h, w, n = map(int, input().split())
num = n//h + 1
floor = n % h
if n % h == 0: # h의 배수이면,
num = n//h
floor = h
print(f'{floor*100+num}')
Python3 코드 풀이
1. 문제에 대한 전체적인 코드 풀이
이 문제의 ACM 호텔은 손님이 오면 엘리베이터에 가까운 방부터 손님을 안내한다. 엘리베이터에 가까운 방은 각 층의 1호실에 해당한다. 예를 들어 호텔의 층수가 4층이라면 101 -> 201 -> 301-> 401 -> 102 -> 202 ->... 이런 식으로 방이 배정된다. 즉, 1호실의 1층부터 H층까지 채워지면 2호실의 1층부터 H층까지 방이 채워지는 식이다.
문제에서 호텔의 총 층수, 호수, 손님이 방문한 순서 이렇게 세 개의 숫자를 입력받으면 N번째 방문한 손님이 묵을 호텔의 호수를 출력해야 한다. 이때, 손님이 방문한 순서 N과 객실 호수의 규칙성을 찾아보면 층수는 N에서 건물 층수를 나눈 나머지가 되고 호수는 N에서 건물 층수를 나눈 몫 +1 이 된다. 만일 N이 건물 층수의 배수인 경우에는 층수는 입력받은 층수 그대로 되고 호수는 N에서 건물 층수는 나눈 몫이 된다.
2. 손님이 방문한 순서 N번째와 객실 호수의 규칙성을 코드로 작성한다.
for i in range(t):
h, w, n = map(int, input().split())
num = n//h + 1
floor = n % h
테이스 케이스로 입력받는 수만큼 for문을 반복한다. 이후에 for문 안에서 호텔의 층수, 호수, 손님 방문 순서를 각각 h, w, n 변수에 선언하고서 객실의 층은 floor, 각층의 방 번호는 num으로 변수를 지정해서 코드를 작성한다.
방 번호인 num변수는 입력받은 n과 h를 나눈 몫에 1을 더한수이고 층수인 floor변수는 n과 h를 나눈 나머지가 된다. 이 규칙을 코드로 작성하였다.
3. 입력받는 n이 호텔 층수를 나타내는 h의 배수인 경우는 다른 코드를 작성한다.
if n % h == 0: # h의 배수이면,
num = n//h
floor = h
print(f'{floor*100+num}')
코드를 위에 for문만 작성하면 입력받는 n이 호텔 층수인 h의 배수인 경우에는 잘못된 값을 출력하게 된다. 그래서 for문 안에서 if조건식을 사용해서 n이 h의 배수인 때, 즉 n에 h를 나눈 나머지가 0인 때의 조건식을 별도로 작성하였다.
이때에는 방 번호인 num은 n에서 h를 나눈 몫을 그대로 출력해야 하고 floor는 입력받은 h를 그대로 출력한다.
이후에 print 함수로 출력문을 작성할 때에는 위에서 작성한 for문이 층과 호를 각각 구했기 때문에 floor 변수에는 100을 곱하고서 그 수에 num변수를 더한 값을 출력하였다.
'파이썬 스킬업 > 백준 알고리즘 연습' 카테고리의 다른 글
백준 2775번 [파이썬 알고리즘] 부녀회장이 될테야 (3) | 2020.07.12 |
---|---|
백준 알고리즘 2869 [ 파이썬 ] : 달팽이는 올라가고 싶다 (0) | 2020.07.11 |
백준 1193번 [파이썬 알고리즘] : 분수찾기 (2) | 2020.07.10 |