Moong

[백준 10250번][C++] 백준 ACM 호텔 본문

Baekjoon

[백준 10250번][C++] 백준 ACM 호텔

방울토망토 2021. 1. 7. 04:21

www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

문제가 길어서 문제 내용은 링크로 대체할게요!


풀이

Algorithm

  1. 먼저 호수(X)를 어떻게 구할 지 생각해봅니다!
    • 우선 101->201->301->401->...->H01->102->... 이런 식으로 배정을 받겠죠?
    • 즉, H번 차례가 돈 후에 다음 호수로 넘어가게 된다는 뜻입니다.
    • 그렇다면 차례를 H로 나눈 몫이 호수와 연관이 있겠죠!
    • 근데 0호수가 아닌 1호수부터 시작하기 때문에 더하기 1을(N/H+1) 해주어야 합니다.
    • 또 여기에서 예외상황이 발생하게 되는데요, 꼭대기 층인 경우 몫이 그대로 자신의 호수가 되기 때문에 예외처리를 해주어야 합니다.
    • 그래서 간단한 if문을 통해 X를 정의해주었습니다.
  2. 그 다음, 층(Y)를 어떻게 구할 지 생각해봅니다!
    • 층은 나머지와 관련이 있다는 점을 눈치 채셨나요?
    • 호수가 정해지면, 1층부터 차곡차곡 배정받기 때문에 H로 나눈 나머지와 관련이 있습니다.
    • 따라서 N%H가 되겠죠
    • 근데 여기에서도 예외상황이 발생합니다. 마찬가지로 꼭대기 층인 경우 원래대로라면 N%H=0이 되는데, 0층이 아닌 H층이 되어야겠죠?
    • 이때에도 간단한 if문을 통해 예외상황을 고려하여 Y를 정의해줍니다.
  3. 방 번호 구하기
    • 층에 100을 곱하고 호수를 더하면 최종 방 번호가 나옵니다! (Y*100+X)
    • 끝!

 

code

#include <iostream>
#include <string>
using namespace std;

int main() {
	int T, H, W, N, X, Y;
	cin >> T;
	for (int n = 0; n < T; n++) {
		cin >> H >> W >> N;
		X = (N % H == 0 ? N / H : N / H + 1); // 호수
		Y = (N % H == 0 ? H : N % H); // 층
		cout << Y * 100 + X << '\n';
	}

	return 0;
}
Comments