본문 바로가기
백준

[백준] 10250번 : ACM 호텔 – JAVA [자바]

by Hongwoo 2022. 7. 11.
반응형

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

 

10250번: ACM 호텔

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 10250번 ACM 호텔은 브론즈 3 난이도의 수학 및 구현 문제이다. 이 문제에서는 호텔의 층 수 H, 각 층의 방 수 M, 그리고 N번째 손님이 주어진다. 손님들은 정문으로부터 가장 짧은 방을 선호한다고 할 때 몇 번 방을 배정받는지를 출력하면 되는 문제이다.

 

우선 예시를 살펴보겠다.

 

 

 

EX) H = 6, W = 12, N = 10

위에 있는 사진과 같은 호텔이 있다고 가정해 보겠다. 총 6층짜리 호텔이고 각 층에는 방이 12개씩 있다. 이때, 10번째 손님이 들어왔을 때 몇 번째 방을 배정받는지를 구하면 된다.

 

 

 

위에 있는 사진처럼 10번째 손님이므로 4번째 층에 있는 두 번째 방, 즉 402호를 배정받는 것을 알 수 있다.

 

우선 손님이 몇 층에 있는 방을 배정받는지 살펴보겠다.

 

이런 유형의 문제는 패턴을 찾아서 접근하면 조금 더 수월하게 풀 수 있다. 위와 같은 호텔에서 첫 번째 손님이라면 당연히 1층에 있는 방을 배정받고 6번째 손님이면 6층에 있는 방을 배정받고 7번째 손님이면 다시 1층에 있는 방을 배정받는 대신에 두 번째 방을 배정받는다.

 

여기서 손님이 머무는 층은 다음과 같은 공식으로 구할 수 있다.

 

if (n % h == 0) 층 = h

else 층 = n % h

 

그리고 몇 번째 방을 배정받는지를 살펴보겠다. 1 ~ 6번째 손님은 1번째 방, 7 ~ 12번째 손님들은 2번째 방을 배정받았다. 따라서 Math.ceil (n / h) 번 방을 배정받는 것을 알 수 있다.

 

이러한 로직을 밑에 있는 코드로 옮겼다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());  //테스트 케이스 개수
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < t; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int h = Integer.parseInt(st.nextToken());  //층 수
            int w = Integer.parseInt(st.nextToken());  //각 층의 방 수
            int n = Integer.parseInt(st.nextToken());  //n번째 손ㄴ;ㅁ
            if (n % h == 0) {  //나머지가 0이면 가장 높은 층으로 올라감
                sb.append(h);
            } else {
                sb.append(n % h);
            }
            double room = Math.ceil((double)n / (double)h);
            if (room < 10) {
                sb.append("0");
            }
            sb.append((int)room + "\n");
        }
        System.out.print(sb);
    }
}

 

 

반응형

댓글