❓ 문제
🛎️ 아이디어
1. 회전해야하는 숫자들을 top, right, bottom, left순으로 리스트에 담는다.
a. 단, bottom과 left는 역순으로 담는다.
2. deque의 rotate 함수를 활용해서 1칸씩 오른쪽으로 이동해준다.
3. 다시 top, right, bottom, left순으로 넣어준다.
a. 단, bottom과 left는 역순으로 넣어준다.
💻 풀이
from collections import deque
def solution(rows, columns, queries):
items = [[y + x * columns for y in range(1, columns + 1)] for x in range(rows)]
minimum_list = []
for x1, y1, x2, y2 in queries:
x1 -= 1
y1 -= 1
x2 -= 1
y2 -= 1
# 위치 변경할 숫자들
change_list = []
# top
change_list.extend(items[x1][y1: y2])
# right
for x in range(x1, x2):
change_list.append(items[x][y2])
# bottom
change_list.extend(reversed(items[x2][y1 + 1: y2 + 1]))
# left
for x in range(x2, x1, -1):
change_list.append(items[x][y1])
# 최솟값 구하기
minimum_list.append(min(change_list))
# deque를 이용한 위치 변경
dq = deque(change_list)
dq.rotate(1)
# top, right, bottom, left 순으로 넣어주기
# top
for y in range(y1, y2):
items[x1][y] = dq.popleft()
# right
for x in range(x1, x2):
items[x][y2] = dq.popleft()
# bottom
for y in range(y2, y1, -1):
items[x2][y] = dq.popleft()
# left
for x in range(x2, x1, -1):
items[x][y1] = dq.popleft()
return minimum_list
'Algorithm | Language > Python' 카테고리의 다른 글
[programmers/Lv.2] 땅따먹기 (0) | 2023.02.23 |
---|---|
[programmers/Lv.2] 다리를 지나는 트럭 (0) | 2023.02.23 |
[programmers/Lv.2] 후보키 (0) | 2023.02.23 |
[programmers/Lv.2] [3차] 방금그곡 (0) | 2023.02.23 |
[programmers/Lv.2] 스킬트리 (0) | 2023.02.23 |