[Python] 프로그래머스(Lv2) - 행렬 테두리 회전하기

Kerri·2021년 5월 4일
0

코테

목록 보기
42/67

안녕하세요 :)

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

테두리 부분을 회전하는 문제였습니다.
이걸보니 생각나는 문제... 삼성 SW공채 코딩테스트 기출이었던 공기청정기 문제가 생각나네요.
(바로 이 문제 )

풀이

→ ↓ ← ↑

이렇게 4가지로 구분하여 구현했습니다.
문제에서 원하는 최솟값은 while 문을 돌면서 값을 찾았습니다.

def turn(array, a, b, c, d):
    min_val = array[a][b]
    
    # now
    x, y = c, d
    
    edge1 = array[a+1][b]
    edge2 = array[a][d]
    edge3 = array[c][d]
    edge4 = array[c][b]
    
    # →
    while y > b:
        array[a][y] = array[a][y-1]        
        min_val = min(min_val, array[a][y])
        y -= 1
    array[a][b] = edge1
        
    # ↓
    while x > a:
        array[x][d] = array[x-1][d]        
        min_val = min(min_val, array[x][d])
        x -= 1
    array[a+1][d] = edge2
    
    # ←  
    y = b
    while y < d:
        array[c][y] = array[c][y+1]
        min_val = min(min_val, array[c][y])
        y += 1
    array[c][d-1] = edge3
     
    # ↑
    while x < c:
        array[x][b] = array[x+1][b]
        min_val = min(min_val, array[x][b])
        x += 1
    array[c-1][b] = edge4
    
    return min(min_val, edge1, edge2, edge3, edge4)


def solution(rows, columns, queries):
    result = []
    
    array = []
    for r in range(1, rows + 1):
        array.append(list(range((r - 1) * columns + 1, r * columns + 1)))
    
    for q in queries:
        a, b, c, d = q
        a -= 1
        b -= 1
        c -= 1
        d -= 1
        result.append(turn(array, a, b, c, d))
    
    return result
profile
안녕하세요 !

0개의 댓글