[파이썬]프로그래머스 2021 Dev Matching 행렬 테두리 회전하기

Byeonghyeon Kim·2021년 5월 4일
0

알고리즘문제

목록 보기
72/93
post-thumbnail
post-custom-banner

링크

프로그래머스 2021 Dev Matching 행렬 테두리 회전하기


행렬을 만들고 양 끝 좌표를 이용해 실제로 외곽의 값을 옮겨주었다.
시작좌표를 기준으로 시계방향으로 옮겼다.

문제를 읽고 주어지는대로 잘 구현만 하면 되는 문제이다.


정답 코드

def solution(rows, columns, queries):
    
    arr = [([0] * columns) for _ in range(rows)]
    for i in range(rows):
        for j in range(columns):
            arr[i][j] = (j + 1) + columns * i
            
    def move(sr, sc, er, ec):
        xr, xc = sr, sc # 이전좌표
        ex_num = arr[xr][xc] # 이전 값
        min_num = ex_num # 최소 값
        for _ in range(ec - sc): # 우
            nr, nc = xr, xc + 1 # 이동할 좌표
            tmp = arr[nr][nc] # 다음 움직일 숫자
            if tmp < min_num:
                min_num = tmp
            arr[nr][nc] = ex_num # 이동할 좌표에 이전 값 할당
            xr, xc = nr, nc # 이전좌표 변경
            ex_num = tmp # 이전좌표의 값 변경

        for _ in range(er - sr): # 하
            nr, nc = xr + 1, xc
            tmp = arr[nr][nc]
            if tmp < min_num:
                min_num = tmp
            arr[nr][nc] = ex_num
            xr, xc = nr, nc
            ex_num = tmp

        for _ in range(ec - sc): # 좌
            nr, nc = xr, xc - 1
            tmp = arr[nr][nc]
            if tmp < min_num:
                min_num = tmp
            arr[nr][nc] = ex_num
            xr, xc = nr, nc
            ex_num = tmp

        for _ in range(er - sr): # 상
            nr, nc = xr - 1, xc
            tmp = arr[nr][nc]
            if tmp < min_num:
                min_num = tmp
            arr[nr][nc] = ex_num
            xr, xc = nr, nc
            ex_num = tmp

        return min_num
    
    ans = []
    for query in queries:
        sr, sc, er, ec = query
        ans.append(move(sr-1, sc-1, er-1, ec-1))
        
    return ans

알게된 것👨‍💻

  • 변수를 활용해 이전값을 저장해주고 갱신하며 진행할 수 있다.
profile
자기 주도 개발전 (개발, 발전)
post-custom-banner

0개의 댓글