https://programmers.co.kr/learn/courses/30/lessons/77485?language=python3
코딩테스트 연습 - 행렬 테두리 회전하기
6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]
programmers.co.kr
문제풀이
deque의 rotate를 사용하였다.
코드
from collections import deque
def solution(rows, columns, queries):
arr = [[0] * columns for _ in range(rows)]
cnt = 0
answer = []
for i in range(rows):
for j in range(columns):
cnt += 1
arr[i][j] = cnt
for qur in queries:
q = deque([])
x1, y1, x2, y2 = qur
for i in range(y1 - 1, y2):
q.append(arr[x1 - 1][i])
for i in range(x1, x2):
q.append(arr[i][y2 - 1])
for i in range(y2 - 2, y1 - 2, -1):
q.append(arr[x2 - 1][i])
for i in range(x2 - 2, x1 - 1, -1):
q.append(arr[i][y1 - 1])
q.rotate(1)
answer.append(min(q))
for i in range(y1 - 1, y2):
arr[x1 - 1][i] = q.popleft()
for i in range(x1, x2):
arr[i][y2 - 1] = q.popleft()
for i in range(y2 - 2, y1 - 2, -1):
arr[x2 - 1][i] = q.popleft()
for i in range(x2 - 2, x1 - 1, -1):
arr[i][y1 - 1] = q.popleft()
return answer
입력받은 queries를 사용해 회전해야 하는 영역을 특정한 뒤 for문을 사용하여 행렬이 영역 값들을 deque에 append 합니다.
q.roatate(n)을 사용하여 마치 행렬이 회전하듯이 deque의 값들을 n만큼 오른쪽으로 밀어냅니다. (-n일 경우 반대방향인 왼쪽)
>>> q = deque([1, 2, 3, 4])
>>> q.rotate(1)
>>> print(q)
deque([2,3,4,1])
결과값을 저장할 answer 리스트에 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자를 append 해준뒤 행렬에 저장된
q값들을 다시 arr에 저장해줍니다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 / Python (0) | 2021.11.08 |
---|---|
[프로그래머스] 오픈채팅방 / Python (0) | 2021.11.05 |