BOJ

[백준온라인저지/BOJ] 10250번 ACM 호텔

torimuk 2022. 1. 26. 16:47

문제


풀이


층이랑 호수를 자꾸 헷갈려서 오래 걸린 문제이다.

 

H = 호텔의 층수

W = 호텔의 한 층당 호수

N = N번째 손님

 

일때, 경우의 수는 총 3가지이다.

 

1) H와 N이 같거나 H가 N보다 더 클 경우.

호수는 무조건 1호로 고정된다.

2) N%H가 0일 경우.

층수에 맞게 들어오므로 H층 N/H호에 들어오게 된다.

3)그 외(N이 H보다 큰 경우)

N%H 층 N/H호에 들어오게 된다.

 

그리고 만약 호수가 1자리 수라면 호수 앞에 0이 붙어야 한다. ex) 12층 4호인 경우 1204

 

 


따라서 이를 코드로 구현하면 다음과 같다.

import java.util.Scanner;
public class Main {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int T;
        T = scanner.nextInt();
        double[] H = new double[T], W = new double[T], N = new double[T];
        int[] floor = new int[T];
        int[] num = new int[T];
        String[] roomNumber = new String[T];

        for(int i = 0; i < T; i++){
            H[i] = scanner.nextDouble();
            W[i] = scanner.nextDouble();
            N[i] = scanner.nextDouble();
        }

//        H와 N이 같으면 1층N호
//        H > N이면 1층N호
//        H%N==0이면 몫층 N호
//        H < N이면 몫이 층, 나머지가 호수
        for(int i = 0; i < T; i++){
            if(N[i] == H[i] || N[i] < H[i]){
                floor[i] = (int) N[i];
                num[i] = 1;
            }
            else if((int) (N[i] % H[i]) == 0){
                floor[i] = (int) H[i];
                num[i] = (int) (N[i] / H[i]);
            }
            else {
                floor[i] = (int) (N[i] % H[i]);
                num[i] = (int) Math.ceil(N[i] / H[i]);
            }

            if((int)(Math.log10(num[i])+1) == 1){
                roomNumber[i] = Integer.toString(floor[i]) + "0" + Integer.toString(num[i]);
            }
            else{
                roomNumber[i] = Integer.toString(floor[i]) + Integer.toString(num[i]);
            }
            System.out.println(roomNumber[i]);
        }
    }
}