본문 바로가기
🥇Baekjoon Solutions/ICPC기출

[C++] 백준 10250번: ACM 호텔(ICPC 기출)

by 코푸는 개발자 2021. 9. 3.
728x90

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

 

10250번: ACM 호텔

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

www.acmicpc.net

 

문제 분석

 

조건
1. 엘베는 가장 왼쪽에 존재
2. 인접한 방의 거리는 1
3. 한쪽면에만 방이 존재
(1,2,3 조건으로 일반 2차원 좌표계 사용가능)
4. 방번호의 표현 -> Y:층수, X:해당층 엘베부터 거리(항상 두자리 형태로 표현) -> YXX:Y가 앞에 써줌
예를 들어, W=12, H=6이면 방의 번호는 101~612까지 존재함((1,1)~(12,6))
5. 엘베 이동은 이동거리로 포함x
6. 아래층을 우선순위로 둠


입력:H W N으로 층 수, 층별 방 수, N번째 고객
출력:N번째 고객의 방 번호

 

예시 경우(6x12) 

101 201 301...601 102... 612

 

문제풀이

  • 아래에서 위로 왼쪽부터 채워지기 때문에 층 수로 고객의 번호를 나눠주는 식 사용
  • 삼항연산자를 사용하여 딱 나눠지는 경우와 그렇지 않은 경우 각각 케이스 분류
  • 가장 위층과 마지막층을 계산한다고 할때 가장 위층이 높이(H)로 나누어 떨어지기에 구분 필요

 

예외처리

  • 가장 H층과 1층을 식으로 나타낼 경우 중간 층과 다른 예외처리가 필요

 

#include <iostream>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int T;

	cin >> T;//테스트 케이스 일회용

	while (T--) {
		int W, H, N, answer;//W:층별 방의 수, H:총 층수, N:고객 입실 순서
		cin >> H >> W >> N;

		answer = (N % H == 0 ? H : N % H) * 100 + (N % H == 0 ? N / H : N / H + 1);

		cout << answer << '\n';
	}

	return 0;
}

 

728x90

댓글