본문 바로가기
코딩테스트

[프로그래머스] 행렬 테두리 회전하기 / Python

by wonseok99 2021. 11. 5.

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에 저장해줍니다.