[BOJ][구현][브4][10250] ACM호텔
문제 링크
첫 번째 풀이
알고리즘
h와 w의 값이 작기 때문에 좌표를 움직이는 방법을 사용해도 됩니다.
1
2
3
4
5
6
(6,1)(6,2)(6,3)
(5,1)(5,2)(5,3)
(4,1)(4,2)(4,3)
(3,1)(3,2)(3,3)
(2,1)(2,2)(2,3)
(1,1)(1,2)(1,3) //101호 102호 103호
정답 코드
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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
//freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(0); cin.tie(0);
int tc = 0; cin >> tc;
while (tc--) {
int h, w, n;
cin >> h >> w >> n;
--n;
int x = 1, y = 1;
while (n > 0) {
x++;
if (x == h + 1) {
x = 1;
y++;
}
n--;
}
cout << x << (y < 10 ? "0" : "") << y << "\n";
}
return 0;
}
두 번째 풀이
알고리즘
h,w,n를 사용해서 수식으로 표현해도 됩니다.
아래 표에 있는 식은 외워두면 좋습니다.
- $(a-1)%b+1$ : 1, … , b를 반복해서 얻을 수 있음
- $(a-1)/b+1$ : 1 b개, 2 b개 …를 반복해서 얻을 수 있음
a | b | a%b | (a-1)%b+1 | (a-1)/b+1 |
---|---|---|---|---|
1 | 3 | 1 | 1 | 1 |
2 | 3 | 2 | 2 | 1 |
3 | 3 | 0 | 3 | 1 |
4 | 3 | 1 | 1 | 2 |
5 | 3 | 2 | 2 | 2 |
6 | 3 | 0 | 3 | 2 |
7 | 3 | 1 | 1 | 3 |
8 | 3 | 2 | 2 | 3 |
9 | 3 | 0 | 3 | 3 |
10 | 3 | 1 | 1 | 4 |
11 | 3 | 2 | 2 | 4 |
12 | 3 | 0 | 3 | 4 |
이 공식을 사용하는 다른 문제로는 분산처리가 있습니다.
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
//freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(0); cin.tie(0);
int tc = 0; cin >> tc;
while (tc--) {
int h, w, n;
cin >> h >> w >> n;
printf("%d%02d\n", (n - 1) % h + 1, (n - 1) / h + 1);
}
return 0;
}
Success Notice: 수고하셨습니다.
Leave a comment