[백준 10250] ACM 호텔

백준 10250번 - ACM 호텔

백준 10250번

❓ 문제

너무 기니까 위 링크 참고.


✏️ 풀이

간단하다.
input으로 호텔의 W와 H를 받고 몇 번째 손님인지를 받는다면, 몇 호인지 배정해주면 되는 문제이다.

단, 조건은 걷는 거리가 같을 때 아래층의 방을 선호한다고 적혀있다.

따라서, 우리는 1번 손님 -> 101호, 2번 손님 -> 201호 이런식으로 1층 1호부터 x층 1호까지 위로 쭉 받고, 꼭대기 층일 때, 202호부터 x층2호 까지 쭉 손님을 받는 식으로 배정해주면 된다.

굉장히 간단한 문제이고, 스피디하게 풀었다가 틀렸다.ㅋㅋ역시

아래의 식을 이용하였다.
방 번호 = 100 * (N % H) + (N / H) + 1
위 예제 입출력 케이스는 다 통과하였으나, 위의 식에는 반례가 존재하였다.
input : 6 12 6 -> output : 2

즉, 꼭대기 층에서의 식은 따로 작성을 해주어야 했다.
꼭대기 층의 식 : acm = 100 * H + (N / H)

(N%H==0)일 때 case를 나눠서 다른 식을 적용해주었고, 두 번의 시도만에 정답을 맞출 수 있었다.


✔️ 정답 코드

#include <iostream>
#include <vector>

using namespace std;

vector<int> result;

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

	int H, W, T, N;
	cin >> T;

	for (int i = 0; i < T; i++) {
		int acm;
		cin >> H >> W >> N;
		(N%H ==0) ? acm = 100 * H + (N / H) : acm = 100 * (N % H) + (N / H) + 1;
		result.push_back(acm);
	}

	for (vector<int>::iterator it = result.begin(); it != result.end(); it++)
		cout << *it << "\n";
	return 0;
}

Leave a comment