
https://www.acmicpc.net/problem/10250
오늘은 백준 10250번 ACM 호텔 문제를 풀어봤다.
문제 조건은 호텔의 층 수(H), 각 층의 방 수(W), 손님 번호(N)가 주어지면, N번째 손님이 배정받게 될 방 번호를 출력하는 것이다.
방 번호는 YYXX 형식인데, YY는 층수, XX는 호수로 구성된다. 예를 들어 6층 12방짜리 호텔에서 10번째 손님이면 402호를 배정받는다.
처음엔 전체 방을 배열로 돌면서 N번째를 찾을까 했는데, 생각해보니 수학적으로 바로 계산할 수 있었다.
핵심은 다음과 같다:
층수 = N % H
호수 = N / H + 1
단, N % H == 0이면,
층수는 H,
호수는 N / H
이걸 코드로 바꾸면 이렇게 됐다
int floor = N % H;
int room = N / H + 1;
if (floor == 0)
{
floor = H;
room = N / H;
}
string roomNumber = $"{floor}{room.ToString("D2")}";
room.ToString("D2")를 써서 항상 두 자리 수로 포맷팅해주었다. (예: 3 → 03)
마지막엔 여러 테스트케이스를 한 번에 출력하기 위해 결과들을 리스트에 담아두고 한 번에 출력했다.
처음엔 뭔가 복잡하게 생각했는데, 수학적으로 패턴을 발견하니 훨씬 간단하게 풀렸다.