A. Strange Table | Round #710 Div.3

LONGNEW·2021년 8월 9일
0

CP

목록 보기
73/155

https://codeforces.com/contest/1506/problem/A
시간 2초, 메모리 256MB

input :

  • t (1 ≤ t ≤ 104)
  • n m x(1 ≤ n, k ≤ 106)(1 ≤ x ≤ n ⋅ m)

output :

  • For each test case, output the cell number in the numbering "by rows".

조건 :

  • He noticed that each cell of the table has its number, obtained by the following algorithm "by columns":
    cells are numbered starting from one;
    cells are numbered from left to right by columns, and inside each column from top to bottom;
    number of each cell is an integer one greater than in the previous cell.
    "by columns" 알고리즘을 기준으로 숫자를 얻는다. 각 위치의 숫자는 1에서 부터 시작한다. 칼럼을 기준으로 왼쪽에서 오른쪽으로 숫자가 커진다. 그리고 세로로는 위에서 부터 아래로 커진다. 각 위치의 숫자들은 이전의 숫자보다 1 커진다.

  • He likes the numbering "by rows":
    cells are numbered starting from one;
    cells are numbered from top to bottom by rows, and inside each row from left to right;
    number of each cell is an integer one greater than the number of the previous cell.
    "by rows"에 따라 수를 매기는 것을 선호한다. 각 위치의 숫자는 1에서 부터 시작한다. 행을 기준으로 위에서 아래로 숫자가 커진다. 그리고 그 이전에 왼쪽에서 오른쪽으로 수가 커진다. 각 위치의 숫자들은 이전의 숫자보다 1 커진다.

  • Polycarp doesn't have much time, so he asks you to find out what would be the cell number in the numbering "by rows", if in the numbering "by columns" the cell has the number x?
    "by columns"를 기준으로 헤아린 숫자 x가 주어질 때 이 수가 "by rows"를 기준으로 나열 되었다면 무슨 값을 가지고 있을지 출력하시오.


사실 마지막 문장 해석하는게 제일 어려웠다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이거 해석하기 귀찮아서 한 3일을 안 하고 있었던 나를 반성하는 시간이였다.

일단 칼럼을 기준으로 입력된 x를 받는다. 규칙이 존재하는데 칼럼을 기준으로 받은 숫자가 위치하는 행, 열의 위치를 저장한 이후에 이 위치를 다시 찾는것이다.

n = 3, m = 5의 예시에서
칼럼을 기준으로 볼 때 첫 열에 1, 2, 3 | 두 번째 열에 4, 5, 6 이렇게 3의 배수(?)느낌으로 커진다. 결국 각 수에 -1을 해주면 우리는 정확히 몫을 통해 각 열을 나눌 수 있다.
그리고 다른 하나 행의 경우 나머지를 통해 위치를 알 수 있을 것이다.

그러면 이 계산 결과를 이용해서 이번에는 m을 기준으로 몇 번째 행에 존재하는지 더해주고 나머지를 더해 주면 결과를 얻을 수 있다.

나눗셈을 중점적으로 생각하게 하는 문제였다.

import sys

for _ in range(int(sys.stdin.readline())):
    n, m, x = map(int, sys.stdin.readline().split())
    col = (x - 1) // n
    row = (x - 1) % n
    ans = 1 + row * m + col

    print(ans)

0개의 댓글