문제
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';
마무리
예외처리가 제일 어렵다.

테스트 케이스에는 예외 케이스가 없다.
그래서 내 컴퓨터에서 예제 입력하면 결과가 분명히 맞게 나오는데 채점 서버에 넣어보면 틀렸다고 뜸. 그럴 때마다 어디가 틀렸는지 고민을 한참 한다.
결국 오늘도 구글신의 도움을 받았다.
은혜로운 블로그^^...
참고한 블로그
[백준] 10250번 : ACM 호텔 - JAVA [자바]
https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은
st-lab.tistory.com
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 1260: DFS와 BFS (실버2) (0) | 2023.04.05 |
---|---|
[백준|C++] 2750: 수 정렬하기 (0) | 2021.09.10 |
[백준|C++] 2869: 달팽이는 올라가고 싶다 (0) | 2021.09.02 |
[백준|C++] 2292: 벌집 (0) | 2021.09.01 |
[백준|C++] 1712: 손익분기점 (0) | 2021.08.31 |
[백준|자바] 5622: 다이얼 (0) | 2021.08.28 |