백준 10250번 — ACM 호텔 (Java)

이승욱·2026년 3월 19일

자바알고리즘

목록 보기
16/33

문제 설명

ACM 호텔은 H층, 각 층마다 W개의 방이 있는 구조이다.
손님은 도착 순서대로 방을 배정받으며, 다음 기준을 따른다.

1. 엘리베이터와 가까운 방을 우선 배정
2. 같은 거리라면 더 높은 층 선호

즉, 방 배정 순서는 다음과 같다.

101 → 201 → 301 → ... → H01 → 102 → 202 → ...

층을 먼저 채우고, 그 다음 호수를 증가시키는 방식이다.


입력

첫째 줄

T

테스트 케이스 개수

각 테스트 케이스

H W N
  • H : 층 수
  • W : 각 층의 방 수
  • N : N번째 손님

조건

1 ≤ H, W ≤ 99
1 ≤ N ≤ H × W

출력

N번째 손님이 배정받을 방 번호 출력

형식

층 + 호수 (2자리)

402
1203

입력 예시

2
6 12 10
30 50 72

출력 예시

402
1203

문제 해결 아이디어

이 문제의 핵심은 다음이다.

층을 먼저 채운다

  • 층 = N % H
  • 호수 = N / H

로 계산할 수 있다.


예시

H = 6, N = 10

10 % 6 = 4

호수

10 / 6 = 1 → +1 → 2

결과

402

내가 작성한 풀이

나는 나머지와 몫을 이용해 직접 계산하고,
문자열로 결과를 만들어 출력했다.

코드

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();

        String ans = "";

        for(int i = 0; i < T; i++) {

            int H = sc.nextInt();
            int W = sc.nextInt();
            int N = sc.nextInt();

            int hight = N % H == 0 ? H : N % H;

            int width = N % H == 0 ? N / H : N / H + 1;

            ans += hight;

            if(width < 10)
                ans += ("0" + width);
            else
                ans += width;

            ans += "\n";
        }

        System.out.println(ans);
    }
}

강의 풀이

강의에서는 동일한 로직을 더 간단하게 표현했다.

코드

import java.util.Scanner;

class Main
{
    public static void main (String[] args) {

        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();

        while (T-- > 0) {

            int H = sc.nextInt();
            int W = sc.nextInt();
            int N = sc.nextInt();

            int floor = ((N - 1) % H) + 1;
            int number = (N - 1) / H + 1;

            System.out.printf("%d%02d\n", floor, number);
        }
    }
}

두 풀이 방식 비교

방식특징
내 풀이조건문으로 나머지 처리
강의 풀이(N-1)로 간단하게 처리

핵심 차이

내 코드

N % H == 0 ? H : N % H
N % H == 0 ? N/H : N/H + 1

→ 나머지가 0일 때 따로 처리 필요


강의 코드

(N - 1) % H + 1
(N - 1) / H + 1

→ 모든 경우를 하나의 식으로 처리 가능


핵심 개념

1. 층 계산

층 = ((N - 1) % H) + 1

2. 호수 계산

호수 = ((N - 1) / H) + 1

3. 출력 포맷

System.out.printf("%d%02d\n", floor, number);
  • %02d → 두 자리로 출력 (앞을 0으로 채움)

시간 복잡도

각 테스트 케이스마다 계산은 상수 시간

O(1)

전체 시간 복잡도

O(T)

정리

이 문제는 처음 보면 복잡해 보이지만,
실제로는 나머지와 몫을 이용한 간단한 수학 문제였다.

처음에는 나머지가 0인 경우를 따로 처리했지만,
강의 풀이처럼 (N-1)을 활용하면 모든 경우를 하나의 식으로 처리할 수 있다.

즉,

(N-1) 활용 → 조건문 제거 → 코드 단순화

이 문제의 핵심 포인트였다.

profile
아는거 없는 전공자

0개의 댓글