알고리즘/수학
[백준알고리즘] 수학 - 10250번 ACM 호텔 문제
Fenderblue
2023. 4. 3. 23:38
https://www.acmicpc.net/problem/10250
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
몫, 나머지 연산을 이용하여 풀었다
방의 우선순위가 1층 1호~H층 1호, 1층 2호~H층 2호...~1층 W호~H층 W호 이런 순이기 때문에
높이만큼 얼마나 뺼 수 있는지가 거리가 되고, 빼고 남은값이 층수를 나타내겠다 싶었다
(예를들어 호텔 H가 30, W가 10이라면 62번째에 들어온 손님은 62 - 30 - 30 = 2, 30을 두번 뺐으니 2번째 줄에서 시작하여 나머지값인 2를 더하면 다음줄로 넘어가고 층수는 2가 된다..)
그래서 몫과 나머지 연산을 사용했다
몫을 구하고 나머지가 0이 나왔다면 다음줄로 넘어가지 않음, 해당 줄의 맨 윗층 호수가 배정되겠다
연산을 하려는데 손님의 들어온 순서가 호텔의 높이보다 작은 수라면
몫 연산을 하지 않고 그대로 첫번째 줄, 즉 nn1호가 될것이고 나머지값이 층수를 좌우할것이다
풀이코드
package baekjoonWeek2;
import java.io.*;
import java.util.StringTokenizer;
public class ACMHotel { //백준 10250번 호텔문제
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
int H; //층수
int W; //방 수
int N; //손님순서
int room; //손님에게 배정될 방 호수
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
int roomHeight; int roomNum;
if (N < H) { //H보다 N이 작을경우엔 나머지값 그대로가 층수가 되고 거리는 1이 된다
roomHeight = N % H;
roomNum = 1;
}else if (N % H == 0) { //나머지값이 0이면 몫이 그대로 거리가 된다
roomNum = N / H;
roomHeight = H; //층수는 최고층수가 된다
} else { //나머지가 1 이상이라면 다음줄로 건너가야해서 +1해주는것, 나머지값은 그래도 높이가 된다
roomNum = (N / H) + 1;
roomHeight = N % H;
}
bw.write(Integer.toString(roomHeight));
if (roomNum < 10) {
bw.write("0"); //거리가 한자리 수라면 앞에 0 붙여야함
}
bw.write(Integer.toString(roomNum));
bw.newLine();
}
bw.flush();
bw.close();
}
}
다른 사람의 코드를 보니 비슷하게 푼 것 같다. 좀 다른점이 있었다면
나는 마지막 출력 부분에서 가운데에 0을 붙일지 말지를 보고 붙였다면
다른 사람의 코드는 구해놓은 나머지에서 100을 곱하는 식이었다. 방번호에서 높이를 나타내는 부분은 100자리수~1000자리수니까!