본문 바로가기

Algorithm

행렬 테두리 회전하기 (77485번) - 프로그래머스 (Programmers)

https://school.programmers.co.kr/learn/courses/30/lessons/77485

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

프로그래머스 - 행렬 테두리 회전하기 (77485번)

 

난이도 : Lv 2

알고리즘 : Implementation (구현)

 

def solution(rows, columns, queries):
    def rotate(x1, y1, x2, y2):
        x1 -= 1; y1 -= 1; x2 -=1; y2 -= 1
        miny = tmp = board[x1][y1]
        for r in range(x1, x2):
            board[r][y1] = board[r+1][y1]
            miny = min(miny, board[r][y1])
        for c in range(y1, y2):
            board[x2][c] = board[x2][c+1]
            miny = min(miny, board[x2][c])
        for r in range(x2, x1, -1):
            board[r][y2] = board[r-1][y2]
            miny = min(miny, board[r][y2])
        for c in range(y2, y1, -1):
            board[x1][c] = board[x1][c-1]
            miny = min(miny, board[x1][c])
        board[x1][y1+1] = tmp
        return miny
    
    
    maxy = rows * columns
    board = [[r+c for c in range(columns)] for r in range(1, maxy, columns)]
    return [rotate(*q) for q in queries]

 

 

2021 Dev-Matching: 웹 백엔드 개발자(상반기) 기출문제이다.

 

코드와 같이, 각 쿼리마다

행렬의 테두리를 한 칸씩 시계방향으로 회전시키고,

테두리에서 최소값을 찾아 반환하면 된다.

 

(x1, y1) 좌표값을 기억해두고, 테두리를 한 칸씩 회전시킨 다음

마지막에 원래의 (x1, y1) 좌표값을 (x1, y1+1) 좌표에 넣어주는 방식으로 구현했다.