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

2024. 1. 16. 08:40백준알고리즘/수학

728x90

 

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

 

10250번: ACM 호텔

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

www.acmicpc.net


문제


접근

- 엘레베이터와 가까운 거리부터 배정

- 거리가 같은 경우 낮은 층 수 부터 배정

- 방번호는 YXX 나 YYXX 형태로 배정(층수 Y는 100의 자리부터 시작됨)

엘레베이터 7 14    
6 13    
5 12    
4 11    
3 10    
2 9 ...  
1 8 15  

 

1. 층수 구하기

예를 들어 10번째 손님이 3층짜리 호텔에서 방배정을 받는다고 가정하면, 아래와 같다. 

엘레베이터 3 [301호] 6 9  
2 5 8  
1 4 7 10 [104호]

10을 3으로 나누었을 때 나머지가 층수가 된다. 

단, 6번째 손님이 6층짜리 호텔에서 방배정을 받을 경우를 가정하면,나머지가 없으므로 손님수와 층수를 나눈 나머지가 0일 경우 손님수가 층수가된다. 

 

2. 호수 구하기

층수구하는 예시와 마찬가지로  10을 3으로 나누었을 때  몫+1 을 해주면 호수가 된다.

단, 손님수와 층수를 나눈 나머지가 0일 경우는 몫이 호수가 된다.

 


코드

package org.example.question;

import java.util.Arrays;
import java.util.Scanner;

public class Q10250_재시도 {
    public static void main(String[] args) {
        //1. 입력
        Scanner sc = new Scanner(System.in);
        String strT = sc.nextLine();
        int T = Integer.parseInt(strT);

        String[] HWN = new String[T];
        for (int i = 0; i < T; i++) {
            HWN[i] = sc.nextLine();
        }

        //2. T:테스트케이스개수,
        //   T개수만큼 HWN 이 라인별로 입력됨
        //   H:층수,W:방수,N:N번째손님
        int[] rslt = new int[T];
        int startIdx = 0;
        for (int i = 0; i < T; i++) {
            startIdx = 0;
            String strH = HWN[i].substring(startIdx, HWN[i].indexOf(" "));
            startIdx = strH.length()+1;
            String strW = HWN[i].substring(startIdx, HWN[i].indexOf(" ", startIdx));
            startIdx += strW.length()+1;
            String strN = HWN[i].substring(startIdx, HWN[i].length());

            int H = Integer.parseInt(strH);
            int W = Integer.parseInt(strW);
            int N = Integer.parseInt(strN);

            //2-1. 층수 구하기
            int floor = N%H;
            if (N % H == 0) {
                floor = H;
            }
            floor *= 100; //401호 1201호 형식으로 맞추어주기 위함(100의 자리부터 층수가 시작됨)

            //2-2. 호수 구하기
            int room = N/H + 1;
            if (N % H == 0) {
                room = N/H;
            }

            //2-3. 결과값 조립
            rslt[i] = floor+room;
        }

        Arrays.stream(rslt).forEach(System.out::println);
        sc.close();
    }
}

 

 


참고 : https://st-lab.tistory.com/77

 

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

https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은

st-lab.tistory.com

 

728x90