백준 웹사이트 "10250번 - ACM 호텔" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int main(void){
int T;
scanf("%d", &T);
for(int i=0; i<T; i++){
int H, W, N;
scanf("%d %d %d", &H, &W, &N);
int X; //엘리베이터에서부터 세었을 때의 번호
int Y; //층수
if(N%H!=0){
Y = N%H;
X = N/H + 1;
}
else{
Y = H;
X = N/H;
}
if(X<10){
printf("%d0%d\n", Y, X);
}
else{
printf("%d%d\n", Y, X);
}
}
}
문제 풀이
문제 설명이 굉장히 긴데, 결국 손님들의 방 배정이 어렵지는 않습니다. 남아있는 방들 중에서 엘리베이터와 가장 가까운 방을 배정하고, 만약 그러한 방이 여러 개면 그 중에서 가장 아래에 있는 방을 배정하면 됩니다. 예시를 들어 생각하면 쉬운데, H=6, W=12일 경우에는 101호, 201호, 301호, 401호, 501호, 601호, 102호, 202호, 302호, ... , 412호, 512호, 612호 순으로 방을 배정해나갑니다.
위의 예시를 분석하는 것만으로도 문제는 쉽게 풀 수 있습니다. 잘 보면, '층'에 해당하는 숫자들은 1~6 사이를 순환하고, '엘리베이터에서 세었을 때의 번호'에 해당하는 숫자들은 1이 모두 나온 후, 2가 모두 나오고, 3이 모두 나오고 있습니다. 다시 말해, 앞 두 자리는 1~H 사이를 순환하고, 뒷 두 자리는 1부터 W까지 차례로 나옵니다. 이를 통해 내릴 수 있는 결론이, '층수'에 해당하는 앞 두 자리는 'N%H'로 표현이 가능하며, '엘리베이터에서 세었을 때의 번호'에 해당하는 뒷 두 자리는 'N/H + 1'로 표현이 가능하다는 것입니다 (Line 13 ~ 16). 다만, 0층은 존재하지 않고 대신에 꼭대기 층이 존재하기에 N%H가 0일 경우는 예외로 두어야 합니다 (Line 17 ~ 20).
마지막으로 출력만 하면 되는데, 층수는 Y와 YY 두 가지 경우가 가능하지만 뒷 두 자리는 항상 XX라는 것을 기억합시다. 즉 Y는 그대로 출력하면 되지만, X는 한 자리일 경우 앞에 0을 추가해서 출력해야 합니다. 이를 반영하면, 출력 부분은 Line 22 ~ 27와 같이 됩니다.
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 2839번 - 설탕 배달 (0) | 2022.01.20 |
---|---|
[백준/C언어] 2775번 - 부녀회장이 될테야 (0) | 2022.01.19 |
[백준/C언어] 2869번 - 달팽이는 올라가고 싶다 (0) | 2022.01.17 |
[백준/C언어] 1193번 - 분수찾기 (0) | 2022.01.16 |
[백준/C언어] 2292번 - 벌집 (0) | 2022.01.15 |