10250. ACM 호텔 [JAVA]

Nak.s·2023년 1월 18일
0

CodeTest

목록 보기
11/19

이 문제는 특정 호텔에 방문하는 손님들을 어느 방에 매칭할지에 대한 문제 이다.
손님들의 특성은 층수와 관계없이 엘리베이터와 가깝기를 희망한다고 본문에 정의 되어있다.

따라서, 수학적을 풀어보면, 높이가 h 이고 넓이가 w 일때,
h의 w배수 손님을 받을 수 있으니,
n번째 손님이 h의 몇 배수와 몇 배수 사이에 있는지 체크하여,
그 n을 6으로 나눈것의 몫이 층수가 되고, 그 나머지가 방 번호가 된다.

//ACM 호텔
//호텔 방 번호의 규칙을 찾아 출력하는 문제
public class BJ_10250 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int numOfTestCase = Integer.parseInt(br.readLine());

        while (0 < numOfTestCase) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int height = Integer.parseInt(st.nextToken());
            int width = Integer.parseInt(st.nextToken());
            int num = Integer.parseInt(st.nextToken());

            if(height < 1) return;;
            if(width > 99) return;
            if(num < 1 || num > height * width) return;

            int roomNum = getAssignedRoomNumber(height,width,num);
            System.out.println(roomNum);
            numOfTestCase--;
        }
    }

    public static int getAssignedRoomNumber(int height, int width, int num) {
        if(num  == 1) return 101;

        //층수별로 나머지와 몫이 동일하도록 계산하기 쉽게 Num-1 로 계산
        int line = ((num - 1) / height) + 1; //라인은 N번째 손님을 height로 나눈 몫
        int storey = (((num - 1) % height) + 1)  * 100; //층수는 N번째 손님을 height로 나눈 나머지로 계산

        return line + storey;
    }
}
profile
궁금함이 많은 개발자

0개의 댓글