[백준알고리즘] 10250번 ACM 호텔
2024. 1. 16. 08:40ㆍ백준알고리즘/수학
728x90
문제 출처 : https://www.acmicpc.net/problem/10250
문제
접근
- 엘레베이터와 가까운 거리부터 배정
- 거리가 같은 경우 낮은 층 수 부터 배정
- 방번호는 YXX 나 YYXX 형태로 배정(층수 Y는 100의 자리부터 시작됨)
엘레베이터 | 7 | 14 | ||
6 | 13 | |||
5 | 12 | |||
4 | 11 | |||
3 | 10 | |||
2 | 9 | ... | ||
1 | 8 | 15 |
1. 층수 구하기
예를 들어 10번째 손님이 3층짜리 호텔에서 방배정을 받는다고 가정하면, 아래와 같다.
엘레베이터 | 3 [301호] | 6 | 9 | |
2 | 5 | 8 | ||
1 | 4 | 7 | 10 [104호] |
10을 3으로 나누었을 때 나머지가 층수가 된다.
단, 6번째 손님이 6층짜리 호텔에서 방배정을 받을 경우를 가정하면,나머지가 없으므로 손님수와 층수를 나눈 나머지가 0일 경우 손님수가 층수가된다.
2. 호수 구하기
층수구하는 예시와 마찬가지로 10을 3으로 나누었을 때 몫+1 을 해주면 호수가 된다.
단, 손님수와 층수를 나눈 나머지가 0일 경우는 몫이 호수가 된다.
코드
package org.example.question;
import java.util.Arrays;
import java.util.Scanner;
public class Q10250_재시도 {
public static void main(String[] args) {
//1. 입력
Scanner sc = new Scanner(System.in);
String strT = sc.nextLine();
int T = Integer.parseInt(strT);
String[] HWN = new String[T];
for (int i = 0; i < T; i++) {
HWN[i] = sc.nextLine();
}
//2. T:테스트케이스개수,
// T개수만큼 HWN 이 라인별로 입력됨
// H:층수,W:방수,N:N번째손님
int[] rslt = new int[T];
int startIdx = 0;
for (int i = 0; i < T; i++) {
startIdx = 0;
String strH = HWN[i].substring(startIdx, HWN[i].indexOf(" "));
startIdx = strH.length()+1;
String strW = HWN[i].substring(startIdx, HWN[i].indexOf(" ", startIdx));
startIdx += strW.length()+1;
String strN = HWN[i].substring(startIdx, HWN[i].length());
int H = Integer.parseInt(strH);
int W = Integer.parseInt(strW);
int N = Integer.parseInt(strN);
//2-1. 층수 구하기
int floor = N%H;
if (N % H == 0) {
floor = H;
}
floor *= 100; //401호 1201호 형식으로 맞추어주기 위함(100의 자리부터 층수가 시작됨)
//2-2. 호수 구하기
int room = N/H + 1;
if (N % H == 0) {
room = N/H;
}
//2-3. 결과값 조립
rslt[i] = floor+room;
}
Arrays.stream(rslt).forEach(System.out::println);
sc.close();
}
}
참고 : https://st-lab.tistory.com/77
728x90
'백준알고리즘 > 수학' 카테고리의 다른 글
[백준알고리즘] 1193번 직사각형에서 탈출 (2) | 2024.01.19 |
---|---|
[백준알고리즘] 1085번 직사각형에서 탈출 (0) | 2024.01.17 |