문제 출처: https://www.acmicpc.net/problem/10250
호텔에 손님이 오는데 선착순으로 층마다 엘리베이터에서 가까운 방으로 배정을 한다.
위 그림을 참고 하면 어떤 구조인지 알 수 있다.
입력값으로 H, W, N이 들어온다.
H는 몇 층까지 있는지, W는 층마다 몇 호까지 있는지, N은 몇번째 손님인지 이다.
입력값 예제
2
6 12 10
30 50 72
첫째줄은 총 손님 수
둘째 줄부터 H, W, N 순이다.
출력값 예제
402
1203
둘째줄의 손님은 402호로
셋째줄의 손님은 1203호로 배정되었다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int total = Integer.parseInt(br.readLine());
for(int i = 0; i < total; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int h = Integer.parseInt(st.nextToken());
st.nextToken();
int n = Integer.parseInt(st.nextToken());
int roomNum = n / h;
roomNum += n % h == 0 ? 0 : 1;
int floor = n % h * 100;
floor = floor == 0 ? h * 100 : floor;
sb.append(roomNum + floor).append('\n');
}
System.out.println(sb);
br.close();
}
}
일단 w는 필요없다. 문제 설명에 방의 갯수보다 넘는 번째 손님이 온다는 내용은 없다.
n번째 손님을 h로 나누면 몇 층인지는 모르나 몇호 인지 알 수 있다. n이 h로 정확히 나누어 떨어지지 않으면 1만 더 더하면 된다.
ex) 70번째 손님이 총 7층 짜리 호텔에 방문 = 무조건 10호에 배정
ex))71번째 손님이 총 7층 짜리 호텔에 방문 = 무조건 11호에 배정
n번째 손님을 h로 나눈 값의 나머지가 층을 결정, 단 정확히 나누어 떨어져서 나머지가 0일 경우 h가 그대로 층을 결정
ex) 3번째 손님이 3층 짜리 호텔에 방문 = 3 / 3 = 0, 그러므로 3층에 배정
ex) 5번째 손님이 3층 짜리 호텔에 방문 = 2층에 배정
StringBuilder를 사용해서 한번만 출력시키는것이 BufferedWriter를 사용하는것 보다 빠르다.