10250_ACM 호텔
링크
https://www.acmicpc.net/problem/10250
풀이
일단 이렇게 사람들이 배정을 받는다는 사실은 눈치 챘을 것입니다.
단순하게 예제만 본다면 402의 4는 10%6이고 뒤에 2는 10/6+1이고, 1203의 12는 72%30이고, 3은 72/30+1이라고 생각할 수 있습니다.
이렇게 생각했을 때 일반화 한다면, h, w, n을 받았을 때, n%h과 n/h+1을 출력하면 될 것 같습니다.
하지만 이 문제에서 주의할 게 2가지 있습니다.
1) 꼭대기 층일 때 (n%h가 0일 때) 이때는 값이 다르게 됩니다.
2) 출력할 때, YXX, YYXX로 출력해야 하는데 X가 한 자리이면 앞에 0을 붙여야한다.
ex) 1층 1호 -> 11(X) 101(O)
이것만 주의해서 분류해서 코드를 짜면 됩니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//10250_ACM 호텔 #include <stdio.h>
int main() { int T; int h, w, n; int i;
scanf("%d", &T);
for (i = 0; i < T; ++i) { scanf("%d %d %d", &h, &w, &n);
if (n % h) { //꼭대기 층이 아닐 때 if (n / h + 1 >= 10) //X가 두 자리일 때 printf("%d%d\n", n % h, n / h + 1); else //X가 한 자리일 때 printf("%d0%d\n", n % h, n / h + 1); }
else { //꼭대기 층일 때 if (n / h >= 10) //X가 두 자리일 때 printf("%d%d\n", h, n / h); else //X가 한 자리일 때 printf("%d0%d\n", h, n / h); } } } |
생각이 짧았습니다.
1~n층을 0~n-1층으로 바꿔주면 나누지 않고도 풀 수 있겠네요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//10250_ACM 호텔 #include <stdio.h>
int main() { int T; int h, w, n; int i;
scanf("%d", &T);
for (i = 0; i < T; ++i) { scanf("%d %d %d", &h, &w, &n);
if ((n - 1) / h + 1 >= 10) //X가 두 자리일 때 printf("%d%d\n", (n - 1) % h + 1, (n - 1) / h + 1); else //X가 한 자리일 때 printf("%d0%d\n", (n - 1) % h + 1, (n - 1) / h + 1); }
return 0; } |
'PS > BOJ' 카테고리의 다른 글
[백준 BOJ][DP] 11727 2xn 타일링 2 (5) | 2018.05.27 |
---|---|
[백준 BOJ][DP] 11726 2xn 타일링 (0) | 2018.05.27 |
[백준 BOJ] 1152 단어의 개수 (2) | 2018.05.16 |
[백준 BOJ] 14584 암호 해독 (0) | 2018.05.13 |
[백준 BOJ] 1933 분수찾기 (0) | 2018.05.13 |