1dx = [1, 0, -1, 0]
2dy = [0, 1, 0, -1]
3
4def solution(rows, columns, queries):
5 table = [[(j*columns)+i+1 for i in range(columns)] for j in range(rows)]
6 answer = []
7
8 for y1, x1, y2, x2 in queries:
9 min_num = 10000
10 x1 -= 1
11 y1 -= 1
12 x2 -= 1
13 y2 -= 1
14 direction = 0
15 curX, curY = x1, y1
16 postNum = table[y1][x1]
17 while True:
18 curX = curX+dx[direction]
19 curY = curY+dy[direction]
20
21 temp = table[curY][curX]
22 table[curY][curX] = postNum
23 postNum = temp
24
25 min_num = min(min_num ,postNum)
26
27 if ((curX == x2 and curY == y1) or
28 (curX == x2 and curY == y2) or
29 (curX == x1 and curY == y2)):
30 direction += 1
31
32 if curX == x1 and curY == y1:
33 break
34
35 answer.append(min_num)
36
37 return answer
문제
- rows X columns 크기의 행렬이 있다
- 행렬에는 1부터 rows x columns 까지의 수가 순서대로 적혀있다
- (x1, y1, x2, y2)인 정수 4개로 표현된 회전이 주어진다
- 각 회전 마다 x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전시킨다
- 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return 하라
- TC
- input
rows: 6 columns: 6
queries: [[2,2,5,4],[3,3,6,6],[5,1,6,3]] - ouput
[8, 10, 25]
- input
해결방법
- 꼭짓점에 도달할 때마다 direction 변수를 1 증가시켜서 방향을 바꿔주었다