
[ Contents ]
1. 문제 (링크 참조)
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
2. 문제 풀이
호텔의 층 수와 층별 방의 개수가 주어졌을 때, n번째 방을 찾는 문제입니다.
방의 순서는 101, 201, 301... 과 같이 층 수가 높아지며, 마지막 층에 다다르면 1층 다음방(102)으로 넘어갑니다.
2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학
[Algorithm] 단골 1번 문제, 구현 / 수학
[ Contents ] 1. 구현 단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하
star7sss.tistory.com
배정하는 방의 순서를 파악해야하는 문제입니다. 규칙만 이해하면, 쉽게 풀 수 있습니다.

한 층씩 높아지며, 마지막 층에 다다르면 1층 다음방으로 넘어갑니다. 방 번호를 매기는 순서가 '수평'적이라면 방 배정 순서는 '수직'적입니다. (방 번호는 1층을 다 채우면, 다음 층으로 넘어감)
3. 코드
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
H, W, N = map(int, input().split())
cnt = 1
room = ''
for num in range(1, W+1):
for floor in range(1, H+1):
if cnt == N:
room = str(floor) + f"{num:02d}" #H,W는 1부터 99까지
cnt += 1
break
cnt += 1
if cnt == N+1:
break
print(room)
brute Force 방식으로 방 번호를 하나씩 세면서 풀 수도 있습니다. 수직적으로 방을 배정하면 되므로, 바깥 for문을 방 번호로 하고 안쪽 for문을 층 수로 순환합니다.
2022.01.16 - [Algorithm] - [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?
[Algorithm] 브루트 포스(Brute Force)는 노가다 기법?
[ Contents ] 1. 브루트 포스란? Brute(짐승 같은, 난폭한) + Force(힘, 폭력)의 합성어입니다. 무식하게 푸는 기법으로, '노가다'에 가까운 접근법입니다. 모든 경우의 수를 시험해보며 문제를 해결합니
star7sss.tistory.com
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
H, W, N = map(int, input().split())
print(f"{(N-1)%H+1}{(N-1)//H+1:02d}")
수학적으로 접근해서 규칙을 찾아낼 수도 있습니다. 일반적으로 N을 H(높이)로 나눈 나머지[N%H]가 층 수가 되고, N을 H(높이)로 나눈 몫+1[N//H+1]이 방 번호가 됩니다.
하지만, N이 H의 배수일 경우에는 나머지가 0이 되버립니다. (10층의 10번 손님은 0층...)
따라서 배수로 나눠지지 않도록 조건문으로 따로 처리해주든지, 아니면 N-1로 나누고 +1를 해주는 방식으로 나눠지지 않도록 합니다.

'Algorithm' 카테고리의 다른 글
| [수학/소수] 백준 11653 소인수분해 - Python (0) | 2022.02.09 |
|---|---|
| [수학/소수] 백준 2581 소수 - Python (1) | 2022.02.09 |
| [Brute Force] 백준 2798 블랙잭 - Python (0) | 2022.02.09 |
| [수학/소수] 백준 1929 소수 구하기 - Python (0) | 2022.02.08 |
| [Algorithm] 소수 판별 알고리즘, 에라토스 테네스의 체 (0) | 2022.02.08 |
댓글