본문 바로가기
코딩테스트

[파이썬] 행렬 테두리 회전하기 - 2021 Dev-Matching: 웹 백엔드 개발자 [CODING TEST #22]

by ALTERww 2022. 7. 27.
320x100

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

 

 

 

 

queries마다 루프를 돌면서

왼쪽 모서리부터 밀기로 생각했다면 왼쪽 위 값이 밀려 사라지기 때문에 마지막에 갱신할 수가 없으니 왼쪽 위 값을 temp에 저장한다.

그리고 왼쪽 / 아래 / 오른쪽 / 위 순서대로 밀고, 밀면서 만난 값들 중 최솟값을 실시간으로 저장한다.

잘 풀었는데 board 리스트 만드는 걸 columns * j로 안하고 row * j로 해버리는 탓에 계속 못풀고 있었다. ㅠ

 

def solution(rows, columns, queries):
    answer = []
    board = [[columns * j + i + 1 for i in range(columns)] for j in range(rows)]
    
    for query in queries:
        top = query[0] - 1 # top
        left = query[1] - 1 # left
        bottom = query[2] - 1 # bottom
        right = query[3] - 1 # right
        temp = board[top][left] # 왼쪽 위
        minimum = temp # 매번 밀면서 최솟값 check
        for a in range(bottom - top): # 왼쪽 모서리 올리기
            board[top + a][left] = board[top + a + 1][left]
            minimum = min(minimum,board[top + a + 1][left])
            
        for b in range(right - left): # 아래 모서리 오른쪽 밀기
            board[bottom][left + b] = board[bottom][left + b + 1]
            minimum = min(minimum,board[bottom][left + b + 1])
            
        for c in range(bottom - top): # 오른쪽 모서리 내리기
            board[bottom - c][right] = board[bottom - c - 1][right]
            minimum = min(minimum, board[bottom - c - 1][right])
            
        for d in range(right - left): # 위 모서리 왼쪽 밀기
            board[top][right - d] = board[top][right - d - 1]
            minimum = min(minimum, board[top][right - d - 1])
        board[top][left + 1] = temp
        answer.append(minimum)
    return answer

댓글