▶ BufferedReader, StringTokenizer, StringBuilder를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
이번 문제는 ACM호텔에는 H층, 각 층마다 W개의 방이 있으며 N번째 손님에게 배정될 방 번호를 구하는 문제입니다.
먼저 빠른 입력을 위해서 BufferedReader 클래스를 사용하고, 각 테스트 케이스를 공백을 기준으로 분리하기 위하여 StringTokenizer 클래스를 사용해 주었습니다.
입력받은 T만큼 반복문을 순회하는 데 H, W, N을 정수형으로 캐스팅하여 저장해 줍니다.
문제의 규칙에 따르면, 손님은 밑에 층부터 101, 201, 301... 606까지 배정합니다.
규칙을 보면 N번째 오는 손님은 N % H 층에 배정되고, 방 번호는 N / H + 1이 되는 것을 알 수 있습니다.
H : 6 , W : 3 , N :2 라면
2 % 6 = 2 층에 2 / 6 + 1 = 1번째 방. 따라서 201호에 배정받게 됩니다.
그런데 위와 같은 공식은 한 가지 문제점이 있습니다. 6 번째 손님이 오면 원래대로 라면 601호에 배정받아야 하지만 6 % 6 = 0 층 , 6 / 6 = 2호 ➡️ 002호에 배정받게 됩니다.
따라서 이 점을 고려해야 하는데, 저는 floor(층) 이 0이라면 호텔의 높이 H를 층으로 지정해 주고, room(방 번호)를 -1을 해줘 예외 처리를 해주었습니다.
그러면 6번째 손님은 정상적으로 601호에 배정받게 됩니다.
그리고 구한 floor와 room을 StringBuilder 클래스의 append() 메서드를 사용하여 문자열에 추가해 주고 반환하여 마무리해 줬습니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 음계 (BufferedReader, StringTokenizer, 2920번, Java) (0) | 2024.05.25 |
---|---|
[백준] 최대공약수와 최소공배수 (BufferedReader, StringTokenizer, 유클리드 호제법) (0) | 2024.05.25 |
[백준] 손익분기점 (BufferedReader, 1712번, Java) (0) | 2024.05.24 |
[백준] 직사각형에서 탈출 (BufferedReader, 1085번, Java) (0) | 2024.05.24 |
[백준] 분해합 (BufferedReader, 2231번, 브루트 포스, Java) (0) | 2024.05.24 |