- 난이도 : 브론즈 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
35import 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) {
}
}
}후기
간단한 연산으로 풀 수 있지만 자칫 쉽게 생각하면 틀릴 수 있는 문제