개발/algorithm

[프로그래머스][level2] 행렬 테두리 회전하기 - python

zzi_on2 2022. 3. 25. 16:23

문제 링크

풀이

- 구현 문제 

1. 배열 생성 

 

2. 범위에서 가장 왼쪽 위에 속하는 숫자 저장 후 

1) 왼쪽 세로줄 위쪽으로 한 칸씩 이동 

2) 위쪽 가로줄 오른쪽으로 한 칸씩 이동 

3) 오른쪽 가로줄 아래쪽으로 한 칸씩 이동

4) 아래쪽 가로줄 왼쪽으로 한 칸씩 이동

5) 가장 왼쪽 위에 속하는 숫자 오른쪽으로 한 칸이동 

 + 이동할 때마다 이동한 숫자와 최솟값 비교하여 갱신 

 

3. 최솟값 answer 배열에 추가 

def solution(rows, columns, queries):
    answer = []
    
    data = [ [0] * columns for _ in range(rows)]
    num = 1 
    
    # 배열 생성 
    for a in range(rows):
        for b in range(columns):
            data[a][b] = num
            num += 1 

    for x1, y1, x2, y2 in queries:
        # 가장 왼쪽 위에 속하는 숫자 
        tmp = data[x1-1][y1-1]
        # 최솟값 저장할 변수 
        min_num = tmp
        
        # 왼쪽 세로 줄 이동 
        for i in range(x1-1, x2-1):
            t = data[i+1][y1-1]
            data[i][y1-1] = t 
            print(t)
            min_num = min(min_num,t)
            
        # 위쪽 가로 줄 이동 
        for i in range(y1-1, y2-1):
            t = data[x2-1][i+1]
            data[x2-1][i] = t
            min_num = min(min_num,t)
            
        # 오른쪽 가로 줄 이동 
        for i in range(x2-1,x1-1,-1):
            t = data[i-1][y2-1]
            data[i][y2-1] = t
            min_num = min(min_num,t)
    
        # 아래쪽 가로 줄 이동 
        for i in range(y2-1, y1-1,-1):
            t = data[x1-1][i-1]
            data[x1-1][i] = t
            min_num = min(min_num,t)
        
        # 가장 왼쪽 위 숫자 오른쪽으로 한칸 이동 
        data[x1-1][y1] = tmp
        # 최솟값 저장 
        answer.append(min_num)
            
    return answer