본문 바로가기
Problem Solving/백준

[백준|C++] 10250: ACM 호텔

by 청량리 물냉면 2021. 9. 1.
반응형
문제

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

 

10250번: ACM 호텔

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

www.acmicpc.net

 

 

코드
#include<iostream>
using namespace std;

int main() {
	int tc;
	cin >> tc;
	int w;
	int h;
	int N;

	while (tc--) {
		cin >> h >> w >> N;
		int X, Y;

		if (N % h == 0) 
			X = N / h; 
		else 
			X = N / h + 1;
		
		if (N % h == 0) 
			Y = h;
		else 
			Y = N % h;
		
		cout << Y * 100 + X << '\n';
	}
	return 0;
}

 

 

코드 설명

출처: 백준 온라인 저지

방 배정 순서

101 > 201 > 301 > 401 > 501 > 601 > 102 > 202 > 302 > ...

 

패턴

층 수h는 하나씩 높아지고 호 수w는 동일.

→ 층 수가 꼭대기라면: 층 수h는 1로 초기화되고 호 수w가 +1 증가 

→ 그 상태에서 층 수h는 하나씩 높아지고 호 수w는 동일

 

int X, Y;

X는 호 수, Y는 층 수

 

호 수 구하는 공식. 

X = N / h + 1;

ex. 10명이 6층의 건물에 묵을 때

한 호수(n01호)에는 6명의 손님만 묵을 수 있으므로 7번째 손님부터는 n02호에 묵게 된다.

이를 이용해 이용객의 숫자를 층 수로 나누어준다.

10 / 6을 하면 1.66667의 결과가 나온다. (int 형이므로 결과는 1로 출력됨)

호수는 1호부터 시작하므로 결과값에 1을 더해주면 해당 10번째 손님은 n02호에 묵고 있는 것이다.

 

※예외처리

ex. 12명이 6층의 건물에 묵을 때

12 / 6 = 2이므로 결과값에 1을 더해주면 해당 손님은 실제로는 n02호에 묵고 있음에도 불구하고 n03호실에 묵고 있는 것으로 결과가 도출된다. 

이를 예외로 처리해주기 위해 해당 경우에는 12 / 6 = 2를 호 수로 입력해 준다. 

if (N % h == 0) 
	X = N / h; 
else 
	X = N / h + 1;

 

층 수 구하는 공식.

Y = N % h;

ex. 10명이 6층의 건물에 묵을 때

호 수 구하는 공식에서 설명한 것과 마찬가지고, 한 호수(n01호)에는 6명의 손님만 묵을 수 있으므로 7번째 손님부터는 n02호에 묵게 된다.

이를 이용해 이용객의 숫자를 층 수로 나누어주면, 그 나머지로는 이전 n01호에서 채 수용하지 못한 손님의 명수가 출력된다. 층은 1층부터 시작하므로 해당 인원의 카운트를 세어 n에 넣어주면 해당 손님이 묵고 있는 층 수를 알 수 있다.

10 % 6을 하면 4가 출력되므로 해당 10번째 손님은 402호에 묵고 있는 것이다.

 

※예외처리

ex. 12명이 6층의 건물에 묵을 때

해당 손님이 건물의 꼭대기 층에 묵고 있기 때문에 나머지가 남지 않는 경우이다.

12 / 6 = 0이므로 해당 손님은 00n호에 묵고 있는 것으로 결과가 도출된다.

이를 예외로 처리해주기 위해서는 층 수 X에 그냥 사용자에게 입력받은 층 수 h를 대입해 주면 된다.

if (N % h == 0) 
	Y = h;
else 
	Y = N % h;

 

마지막으로 해당 결과를 출력해 준다. 

cout << Y * 100 + X << '\n';

 

 

 

마무리

예외처리가 제일 어렵다.

테스트 케이스에는 예외 케이스가 없다.

그래서 내 컴퓨터에서 예제 입력하면 결과가 분명히 맞게 나오는데 채점 서버에 넣어보면 틀렸다고 뜸. 그럴 때마다 어디가 틀렸는지 고민을 한참 한다.

결국 오늘도 구글신의 도움을 받았다. 

은혜로운 블로그^^...

 

참고한 블로그

https://st-lab.tistory.com/7

 

[백준] 10250번 : ACM 호텔 - JAVA [자바]

https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은

st-lab.tistory.com

 

반응형