공부/백준(C++) - 2022~

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

상연 2022. 1. 13. 22:16

목차

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

     

    10250번: ACM 호텔

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

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    int main() {
    	int t;
    	int H, W, N;
    	
    	cin >> t;
    	
    	for(int i=0; i<t; i++){
    		cin >> H >> W >> N;
    		
    		if(N % H){
    			cout << (N % H) * 100 + (N / H) + 1 << endl; 
    		}
    		else{
    			cout << H * 100 + (N / H) << endl;	
    		}
    	}
    }

     

    설명

    W는 사실... 이 문제풀이에서 필요하지 않다.

    잘못된 값이 주어졌을때의 처리가 있었다면 필요했을지도 모르겠지만 아무튼 그렇다.

    N번째의 손님이 머물 층수와 호수를 아는 방법에 대해 생각해보자

    층수는 N을 호텔의 높이인 H로 나눈 나머지이다.

    호수는 N을 호텔의 높이인 H로 나눈 몫 + 1이다.

    보통의 경우라면, 이렇게 된다.

    하지만 H가 6인데 N이 6이라면 어떻게 될까?

    601이 나와야 하는데

    층수는 N을 호텔의 높이인 H로 나눈 나머지이다.

    호수는 N을 호텔의 높이인 H로 나눈 몫 + 1이다.

    이를 그대로 해 보면...

    층수는 0이 되고, 호수는 2가된다.

    이러한 경우는 N을 H로 나누었을때 나머지가 0인 경우에 해당하기 때문에

    나머지가 0이라면, 층수는 H로 하고, 호수는 N을 호텔의 높이인 H로 나눈 몫으로 해 주면 된다.