본문 바로가기

[BOJ] - JAVA

[백준] 10250 : ACM 호텔 JAVA 풀이

문제의 길이를 보고 좀 겁먹었는데 의외로 금방 풀 수 있었다.

 

101 - 201 - 301 - 401 - 501 - 601 - 102 - 202 - 302 - 402 - 502 - 602

같은 순서로 방이 배정되는데 

 

테스트케이스의 개수를 T

건물의 층수를 H

한 층의 객실수를 W

방을 배정해야 할 손님의 번호를 N

라고 했을 때

층수는 N % H라는 걸 알 수 있다.

 

이때 주의해야 할 점이 있는데

N이 12고 H가 6이라면 원래대로라면 6층에 배정이되어야 하는데 나머지가 0이라서 0층에 배정되는 문제가 발생한다.

필자도 채점을 해보니 자꾸 오답이 나와서 왜인지 고민을 해보니 이 부분을 처리하지 않은 게 문제였다.

 

아무튼 N이 H로 나눠떨어질 때에는 H 그 자체가 층수가 된다.

 

이제 호수를 구해보자.

호수도 N이 H로 나눠떨어질 때와 그렇지 않을 때 두 경우로 나뉘는데

나눠떨어지는 경우는 N을 H로 나눈 몫, 즉 N/H이 호수가 된다.

그리고 그렇지 않은 경우는 (N/H)+1이 호수가 된다.

 

결론은

N%H==0일 때와 N%H!=0일 때 각각 층수와 호수를 구해서

층수*100 + 호수를 구해 출력해주면 된다.

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;

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()); // 테스트케이스의 개수를 입력받음
        
        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());
            if(N%H!=0){ // N이 H로 나눠떨어지지 않는 경우
            			// 층수는 N%H이고
                        // 호수는 (N/H)+1
                System.out.println(((N%H)*100)+(N/H)+1);
                }
            else{	// N이 H로 나눠떨어지는 경우
            		// 층수는 H이고
                    // 호수는 (N/H)
                System.out.println((H*100)+(N/H));
                }
        }
    }
}