728x90
SMALL
백준 문제 풀이: 10250 [ACM 호텔]
문제 링크: https://www.acmicpc.net/problem/10250
문제 설명:
ACM 호텔 매니저는 손님을 방 번호로 배정해야 합니다. 호텔은 H × W 크기의 건물로 구성되어 있으며, 각 층에는 W개의 방이 있습니다. 방 번호는 아래와 같은 규칙으로 부여됩니다:
- 각 손님은 엘리베이터에서 가장 가까운 방부터 배정됩니다.
- 먼저, 1층의 방부터 차례로 채워지며 위층으로 올라갑니다.
손님의 대기 순번 N이 주어졌을 때, 손님이 배정받을 방 번호를 출력하는 프로그램을 작성하세요.
입력 조건:
- 첫째 줄에 테스트 케이스의 수 T가 주어집니다.
- 각 테스트 케이스는 H, W, N (1 ≤ H, W ≤ 99, 1 ≤ N ≤ H×W)으로 이루어져 있습니다.
출력 조건:
- 각 테스트 케이스에 대해 N번째 손님이 배정받을 방 번호를 출력합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
int T; // 테스트 케이스 수
cin >> T;
while (T--) {
int H, W, N;
cin >> H >> W >> N; // 호텔의 높이, 너비, 대기 순번
// 배정받을 층과 방 번호 계산
int floor = (N % H == 0) ? H : N % H; // 층 수
int room = (N - 1) / H + 1; // 방 번호
// 방 번호 출력
cout << floor * 100 + room << endl; // 방 번호는 층*100 + 방
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 손님의 대기 순번에 따라 적절한 방 번호를 계산하여 출력합니다.
- 층 계산:
- `N % H`를 사용하여 손님이 배정받을 층을 계산합니다.
- 나머지가 0인 경우, 손님은 꼭대기 층 H에 배정됩니다.
- 방 번호 계산:
- `(N - 1) / H + 1`을 사용하여 방 번호를 계산합니다.
- 이는 손님이 몇 번째 방에 위치하는지를 나타냅니다.
- 결과 출력: 방 번호는 `층 * 100 + 방 번호` 형식으로 출력됩니다.
시간 복잡도 분석:
- 각 테스트 케이스는 상수 시간 복잡도로 처리됩니다.
- 따라서 전체 시간 복잡도는 O(T)입니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
2
6 12 10
30 50 72
출력:
402
1203
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 10869번 [사칙연산](C++)-yes6686- 티스토리 (0) | 2023.12.20 |
---|---|
백준 10818번 [최소, 최대](C++)-yes6686- 티스토리 (0) | 2023.12.20 |
백준 2594번 [놀이공원](C++)-yes6686- 티스토리 (0) | 2023.12.18 |
백준 3052번 [나머지](C++)-yes6686- 티스토리 (0) | 2023.12.18 |
백준 2884번 [알람 시계](C++)-yes6686- 티스토리 (0) | 2023.12.18 |