10250번 - ACM 호텔

10250번 - ACM 호텔

(문제 출처)

  • 난이도 : 브론즈 3(solved.ac 기준)
  • 언어 : java


문제

  • 문제 요약

    H x W형태 호텔에서 엘리베이터와 가장 가까운 순으로 배정하는 프로그램을 작성한다.
    (단, 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않지만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다)

  • 유의 사항
    T의 최대 범위가 정해져있지 않다.
    따라서 2중 반복문을 사용했을 때 최악의 경우 시간초과가 날 우려가 있다.

    • 예시

      모든 케이스가 H = 99, W = 99, N = 9801 일 때
      결과 값을 출력하기 위해서는 9801 * T 번의 for문을 실행하여야 한다.

  • 문제 풀이
    이 문제는 간단한 연산으로도 문제를 풀 수 있다.
    층 순으로 배정하는 것이 아닌 엘리베이터와 가까운 순으로 배정해야한다.

    • 연산 방법
      • N과 H의 나머지 연산을 통해 대상의 층을 파악한다.
      • N와 H의 몫 연산을 통해 대상의 호수를 파악한다.

이렇게 연산한다면 N 이전의 모든 사람을 시뮬레이션 해줄 필요 없이 배정할 수 있다.

  • 코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.io.*;
    import java.util.StringTokenizer;

    public class Main {
    public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    try {
    int T = Integer.parseInt(br.readLine());
    StringTokenizer st;
    int H, W, N, Y, X;
    for (int i = 0; i < T; i++) {
    st = new StringTokenizer(br.readLine());
    H = Integer.parseInt(st.nextToken());
    W = Integer.parseInt(st.nextToken());
    N = Integer.parseInt(st.nextToken());
    Y = N % H;
    X = N / H + 1;
    if (Y == 0) {
    Y = H;
    X -= 1;
    }
    if (X < 10)
    bw.write(Y + "0" + X + "\n");
    else
    bw.write(Y + "" + X + "\n");
    bw.flush();
    }
    bw.close();
    br.close();
    } catch (IOException e) {

    }
    }
    }
  • 후기
    간단한 연산으로 풀 수 있지만 자칫 쉽게 생각하면 틀릴 수 있는 문제

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×