나의 개발일지

[프로그래머스] Lv.2 행렬 테두리 회전하기 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.2 행렬 테두리 회전하기 [Python, 파이썬]

YoonJuHan 2023. 11. 27. 15:21
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77485
  • 🔑 테두리를 회전하는 방법
    • 현재 위치의 값을 다음 위치로 옮기기 X
    • 현재 위치에 이전 위치의 값을 옮기기 O
    • 먼저 시작 위치의 값은 따로 저장을 해야 함
    • 1. 왼쪽 테두리
      • 현재 행 아래쪽의 값을 현재 행으로 당김
      • board[r][c1] = board[r+1][c1]
      • 이때 시작 위치의 값이 사라지기 때문에 따로 저장해 둔 것
    • 2. 아래쪽 테두리
      • 현재 열 오른쪽의 값을 현재 열로 당김
      • board[r2][c] = board[r2][c+1]
    • 3. 오른쪽 테두리
      • 현재 행 위쪽의 값을 현재 행으로 당김
      • board[r][c2] = board[r-1][c2]
    • 4. 위쪽 테두리
      • 현재 열 왼쪽의 값을 현재 열로 당김
      • board[r1][c] = board[r1][c-1]
    • 5. 시작 위치 바로 오른쪽 열에는 미리 저장해 둔 값을 넣음
      • 2, 2 가 시작 위치면 2, 3에 저장한 값 넣음
    • 위 과정을 진행하면서 계속 최솟값을 업데이트하고 query가 끝날 때마다 정답에 추가하면 끝 ✨

 

def solution(rows, columns, queries):
    answer = []
    
    board = []
    n = 1
    for i in range(rows):                       # 2차원 리스트 만들기
        board.append(list(range(n, n+columns)))
        n += columns
    
    for q in queries:
        r1 = q[0] - 1           # 시작 행
        c1 = q[1] - 1           # 시작 열
        r2 = q[2] - 1           # 끝 행
        c2 = q[3] - 1           # 끝 열
        start = board[r1][c1]   # 시작 위치 번호 저장
        min_num = start         # 최솟값
        
        for r in range(r1, r2):                     # 왼쪽 테두리
            board[r][c1] = board[r+1][c1]        
            min_num = min(min_num, board[r][c1])
        
        for c in range(c1, c2):                     # 아래쪽 테두리
            board[r2][c] = board[r2][c+1]           
            min_num = min(min_num, board[r2][c])
            
        for r in range(r2, r1, -1):                 # 오른쪽 테두리
            board[r][c2] = board[r-1][c2]           
            min_num = min(min_num, board[r][c2])
            
        for c in range(c2, c1, -1):                 # 위쪽 테두리
            board[r1][c] = board[r1][c-1]           
            min_num = min(min_num, board[r1][c])
    
        board[r1][c1+1] = start                     # 시작 위치 다음 열에는 저장한 값으로

        answer.append(min_num)
    
    return answer
Comments