본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 행렬 테두리 회전하기

by 안녕나는현서 2021. 12. 16.
728x90

📌 문제

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

 

코딩테스트 연습 - 행렬 테두리 회전하기

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

 

📌 문제 접근 방법

  1. 입력으로 들어온 행과 열의 크기에 따라 2차원 리스트를 생성한다.
  2. 리스트에 시계방향으로 '오른쪽->아래->왼쪽->위'의 방향을 저장한다.
  3. queries를 하나씩 순회하며 회전을 시키고, 회전할 때마다 최소값을 갱신한다.
  4. 1회 회전이 끝날 때마다 저장된 최소값을 answer에 저장한다.

 

📌 코드

def solution(rows, columns, queries):
    numbers = [[columns*r + (c+1) for c in range(columns)] for r in range(rows)]
    
    dxy = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 오 아 왼 위
    answer = []
    
    for x1, y1, x2, y2 in queries:
        way = 0
        x = x1 - 1
        y = y1 - 1
        curr = numbers[x][y]
        min_num = curr
        
        while way < 4:
            nx, ny = x+dxy[way][0], y+dxy[way][1]
            
            if x1-1 <= nx <= x2-1 and y1-1 <= ny <= y2-1:
                curr, numbers[nx][ny] = numbers[nx][ny], curr
                min_num = min(min_num, curr)
                x, y = nx, ny
            else:
                way += 1
                
        answer.append(min_num)
        
    return answer
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 다단계 칫솔 판매  (0) 2021.12.17
[PG/Python] 배달  (0) 2021.12.16
[PG/Python] 튜플  (0) 2021.12.16
[PG/Python] 가장 먼 노드  (0) 2021.12.09
[PG/Python] 기능개발  (0) 2021.12.09

댓글