백준 - ACM호텔[java]

스브코·2021년 11월 15일
0
post-custom-banner

문제 출처: https://www.acmicpc.net/problem/10250

문제 설명

호텔에 손님이 오는데 선착순으로 층마다 엘리베이터에서 가까운 방으로 배정을 한다.

위 그림을 참고 하면 어떤 구조인지 알 수 있다.

입력값으로 H, W, N이 들어온다.

H는 몇 층까지 있는지, W는 층마다 몇 호까지 있는지, N은 몇번째 손님인지 이다.

입력값 예제

2
6 12 10
30 50 72

첫째줄은 총 손님 수
둘째 줄부터 H, W, N 순이다.

출력값 예제

402
1203

둘째줄의 손님은 402호로
셋째줄의 손님은 1203호로 배정되었다.

문제 풀이

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main (String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringBuilder sb = new StringBuilder();
        int total = Integer.parseInt(br.readLine());
        for(int i = 0; i < total; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int h = Integer.parseInt(st.nextToken());
            st.nextToken();
            int n = Integer.parseInt(st.nextToken());
            int roomNum = n / h;
            roomNum += n % h == 0 ? 0 : 1;
            int floor = n % h * 100;
            floor = floor == 0 ? h * 100 : floor;
            sb.append(roomNum + floor).append('\n');
        }
        System.out.println(sb);
        br.close();
    }
}

일단 w는 필요없다. 문제 설명에 방의 갯수보다 넘는 번째 손님이 온다는 내용은 없다.

n번째 손님을 h로 나누면 몇 층인지는 모르나 몇호 인지 알 수 있다. n이 h로 정확히 나누어 떨어지지 않으면 1만 더 더하면 된다.

ex) 70번째 손님이 총 7층 짜리 호텔에 방문 = 무조건 10호에 배정
ex))71번째 손님이 총 7층 짜리 호텔에 방문 = 무조건 11호에 배정

n번째 손님을 h로 나눈 값의 나머지가 층을 결정, 단 정확히 나누어 떨어져서 나머지가 0일 경우 h가 그대로 층을 결정

ex) 3번째 손님이 3층 짜리 호텔에 방문 = 3 / 3 = 0, 그러므로 3층에 배정
ex) 5번째 손님이 3층 짜리 호텔에 방문 = 2층에 배정

StringBuilder를 사용해서 한번만 출력시키는것이 BufferedWriter를 사용하는것 보다 빠르다.

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...
post-custom-banner

0개의 댓글