CS/Algorithm 문제

[Programmers] 행렬 테두리 회전하기

[Programmers] 행렬 테두리 회전하기

 

🎈문제

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

💬설명

  • 회전을 구현할 수 있냐고 물어보는 기본 구현 문제였다.
  • 회전 방향을 dx, dy 배열로 선언해두고 direction + 1 해가면서 각 변의 길이만큼 회전해주면 된다. 처음 회전 문제를 풀어봤으면 헤맸을 수도

👩‍💻코드

# Programmers_행렬테두리회전.py

def rotate(arr, query):
    dx = [0, 1, 0, -1]
    dy = [1, 0, -1, 0]

    x, y = query[0] - 1, query[1] - 1
    pre_value = arr[x][y]
    len_x = query[3] - query[1]
    len_y = query[2] - query[0]
    left = len_x
    direction = 0

    length = 2 * (len_x + 1) + 2 * (len_y + 1) - 4
    min_value = pre_value
    for _ in range(length):
        nx = x + dx[direction]
        ny = y + dy[direction]
        # 최소값 갱신
        min_value = min(min_value, arr[nx][ny])
        # 변경할 자리에 있는 값 저장하고 변경
        tmp = pre_value
        pre_value = arr[nx][ny]
        arr[nx][ny] = tmp
        x = nx
        y = ny
        # 회전 정보 변경
        left -= 1
        if left == 0:
            direction = (direction + 1) % 4
            if direction == 0 or direction == 2:
                left = len_x
            else:
                left = len_y
    for a in arr:
        print(a)
    print()
    return arr, min_value


def solution(rows, columns, queries):
    answer = []

    # 배열 초기화
    arr = [[0 for _ in range(columns)] for _ in range(rows)]
    num = 1
    for i in range(rows):
        for j in range(columns):
            arr[i][j] = num
            num += 1

    # query 수행
    for query in queries:
        arr, smallest = rotate(arr, query)
        answer.append(smallest)

    return answer

 

728x90
반응형