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

박현우·2021년 5월 19일
0

프로그래머스

목록 보기
28/34
post-custom-banner

문제

행렬 테두리 회전하기


문제 해설

x1,y1,x2,y2를 받고 주어진 그래프를 회전하며 가장 작은 값을 저장하는 문제입니다.

가장 핵심은 행렬을 회전하는 부분을 어떻게 구현하냐 인데, 저 같은 경우 방향 변수 d를 놓고 4가지 방향을 모두 끝내면 종료하는 식으로 구현했고, 다른 방식이 있다면 각 변마다 for문을 사용하여 끝낼 수 있는 방식이 있으니 구현하기 쉬운 것으로 택하시면 됩니다.

파이썬은 graph[x][y], tmp = tmp, graph[x][y]와 같이 두 변수의 값을 제 3의 변수 없이 맞바꿀 수 있기 때문에 유용하게 사용할 수 있습니다.


풀이 코드

def rotate(x1, y1, x2, y2, graph, answer):
    # 오른쪽, 아래, 왼쪽, 위 순
    dx = 0, 1, 0, -1
    dy = 1, 0, -1, 0
    d, x, y, tmp = 0, x1, y1, 10000
    min_val = 10000
    while d < 4:
        nx = x + dx[d]
        ny = y + dy[d]
        min_val = min(min_val, graph[x][y])
        # 범위 안인 경우
        if x1 <= nx <= x2 and y1 <= ny <= y2:
            graph[x][y], tmp = tmp, graph[x][y]
            x, y = nx, ny
        else:
            d += 1
    graph[x1][y1] = tmp
    answer.append(min_val)


def solution(rows, columns, queries):
    answer = []
    graph = [[i + 1 for i in range(j * columns, (j + 1) * columns)] for j in range(rows)]
    for query in queries:
        x1, y1, x2, y2 = map(int, query)
        rotate(x1 - 1, y1 - 1, x2 - 1, y2 - 1, graph, answer)
    return answer
post-custom-banner

0개의 댓글