[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: 수고하셨습니다. :+1:

Leave a comment