문제
풀이
층이랑 호수를 자꾸 헷갈려서 오래 걸린 문제이다.
H = 호텔의 층수
W = 호텔의 한 층당 호수
N = N번째 손님
일때, 경우의 수는 총 3가지이다.
1) H와 N이 같거나 H가 N보다 더 클 경우.
호수는 무조건 1호로 고정된다.
2) N%H가 0일 경우.
층수에 맞게 들어오므로 H층 N/H호에 들어오게 된다.
3)그 외(N이 H보다 큰 경우)
N%H 층 N/H호에 들어오게 된다.
그리고 만약 호수가 1자리 수라면 호수 앞에 0이 붙어야 한다. ex) 12층 4호인 경우 1204
따라서 이를 코드로 구현하면 다음과 같다.
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int T;
T = scanner.nextInt();
double[] H = new double[T], W = new double[T], N = new double[T];
int[] floor = new int[T];
int[] num = new int[T];
String[] roomNumber = new String[T];
for(int i = 0; i < T; i++){
H[i] = scanner.nextDouble();
W[i] = scanner.nextDouble();
N[i] = scanner.nextDouble();
}
// H와 N이 같으면 1층N호
// H > N이면 1층N호
// H%N==0이면 몫층 N호
// H < N이면 몫이 층, 나머지가 호수
for(int i = 0; i < T; i++){
if(N[i] == H[i] || N[i] < H[i]){
floor[i] = (int) N[i];
num[i] = 1;
}
else if((int) (N[i] % H[i]) == 0){
floor[i] = (int) H[i];
num[i] = (int) (N[i] / H[i]);
}
else {
floor[i] = (int) (N[i] % H[i]);
num[i] = (int) Math.ceil(N[i] / H[i]);
}
if((int)(Math.log10(num[i])+1) == 1){
roomNumber[i] = Integer.toString(floor[i]) + "0" + Integer.toString(num[i]);
}
else{
roomNumber[i] = Integer.toString(floor[i]) + Integer.toString(num[i]);
}
System.out.println(roomNumber[i]);
}
}
}
'BOJ' 카테고리의 다른 글
[백준온라인저지/BOJ] 2775번 부녀회장이 될테야 (0) | 2022.01.27 |
---|---|
[백준온라인저지/BOJ] 2869번 달팽이는 올라가고 싶다 (0) | 2022.01.25 |
[백준온라인저지/BOJ] 1193번 분수찾기 (0) | 2022.01.25 |
[백준온라인저지/BOJ] 2292번 벌집 (0) | 2022.01.25 |
[백준온라인저지/BOJ] 1712번 손익분기점 (0) | 2022.01.25 |