본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 10250번 : ACM 호텔

by hyunipad 2021. 7. 10.
반응형

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

 

10250번: ACM 호텔

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

www.acmicpc.net

안녕하세요. 이번 포스팅은 백준 알고리즘 10250번 : ACM 호텔입니다.

문제가 길기는 한데, 간략히 요약하자면 N번째 손님에게 몇 호의 방을 배정하는지 구하는 문제입니다.

방 배정은 다음과 같은 규칙을 배정됩니다.

  • 엘리베이터로부터 가깝고 낮은 층부터 차례대로 배정한다.

예를 들어 위의 문제와 같은 한 층에 12개의 방과 6개의 층으로 이루어진 호텔에서 10번째 손님은

101호, 201호, 301호, 401호, 501호, 601호, 102호...로 진행되어 402호를 배정받게 됩니다.

 

그럼 32번째 손님은 어디를 배정받게 될까요?

6층으로 이루어진 호텔은 6번째 손님마다 101호부터 601호까지 꽉 차고 7번째 손님부터 다시 201호를 배정받습니다.

그렇습니다. 7(N)에서 6(H)을 나눈 나머지가 몇층인지가 되고 몫에 1을 더한 값이 몇 호인지가 됩니다.

  • 32 / 6 = 5(+1호)
  • 32 % 6 = 2(층)

따라서 32번째 손님은 206호가 되겠군요.

 

  • 층 = N % H
  • 호수 = N / H + 1

다만, 반례 하나가 있습니다. N % H의 나머지가 0인 경우입니다. 나머지가 0인 경우는 호텔의 꼭대기 층에 방 배정을 받을 때입니다. 반례만 생각하고 코드를 짠다면 쉬운 문제입니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int T = Integer.parseInt(br.readLine()); // T만큼 테스트 진행
		
		for(int i = 0 ; i < T ; i++) {
			String[] HWN = br.readLine().split(" ");
			
			int H = Integer.parseInt(HWN[0]); // 호텔의 층 수
			int W = Integer.parseInt(HWN[1]); // 층마다 방의 갯수
			int N = Integer.parseInt(HWN[2]); // N번째 손님
			
			int floor = N % H; // 층 = 나머지 
			int ho = N / H + 1; // 호수 = 몫 + 1
			
			if(N % H == 0) { // 나머지가 0일 경우 
				floor = H * 100; 
				ho = N / H;
			}else { // 아닐 경우
				floor = (N % H) * 100;
				ho = N / H + 1;
			}
			
			bw.write(floor + ho + "\n");
		}

		br.close();
		bw.flush();
		bw.close();
	}
}

 

 

반응형

댓글