반응형
https://www.acmicpc.net/problem/10250
안녕하세요. 이번 포스팅은 백준 알고리즘 10250번 : ACM 호텔입니다.
문제가 길기는 한데, 간략히 요약하자면 N번째 손님에게 몇 호의 방을 배정하는지 구하는 문제입니다.
방 배정은 다음과 같은 규칙을 배정됩니다.
- 엘리베이터로부터 가깝고 낮은 층부터 차례대로 배정한다.
예를 들어 위의 문제와 같은 한 층에 12개의 방과 6개의 층으로 이루어진 호텔에서 10번째 손님은
101호, 201호, 301호, 401호, 501호, 601호, 102호...로 진행되어 402호를 배정받게 됩니다.
그럼 32번째 손님은 어디를 배정받게 될까요?
6층으로 이루어진 호텔은 6번째 손님마다 101호부터 601호까지 꽉 차고 7번째 손님부터 다시 201호를 배정받습니다.
그렇습니다. 7(N)에서 6(H)을 나눈 나머지가 몇층인지가 되고 몫에 1을 더한 값이 몇 호인지가 됩니다.
- 32 / 6 = 5(+1호)
- 32 % 6 = 2(층)
따라서 32번째 손님은 206호가 되겠군요.
- 층 = N % H
- 호수 = N / H + 1
다만, 반례 하나가 있습니다. N % H의 나머지가 0인 경우입니다. 나머지가 0인 경우는 호텔의 꼭대기 층에 방 배정을 받을 때입니다. 반례만 생각하고 코드를 짠다면 쉬운 문제입니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine()); // T만큼 테스트 진행
for(int i = 0 ; i < T ; i++) {
String[] HWN = br.readLine().split(" ");
int H = Integer.parseInt(HWN[0]); // 호텔의 층 수
int W = Integer.parseInt(HWN[1]); // 층마다 방의 갯수
int N = Integer.parseInt(HWN[2]); // N번째 손님
int floor = N % H; // 층 = 나머지
int ho = N / H + 1; // 호수 = 몫 + 1
if(N % H == 0) { // 나머지가 0일 경우
floor = H * 100;
ho = N / H;
}else { // 아닐 경우
floor = (N % H) * 100;
ho = N / H + 1;
}
bw.write(floor + ho + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 2839번 : 설탕 배달 (0) | 2021.07.28 |
---|---|
[백준 알고리즘][자바] 2775번 : 부녀회장이 될테야 (0) | 2021.07.25 |
[백준 알고리즘][자바] 2869번 : 달팽이는 올라가고 싶다 (0) | 2021.07.05 |
[백준 알고리즘][자바] 1193번 : 분수찾기 (0) | 2021.07.04 |
[백준 알고리즘][자바] 2292번 : 벌집 (0) | 2021.07.03 |
댓글