Lv2 - 행렬 테두리 회전하기

LeeKyoungChang·2022년 4월 26일
0

Algorithm

목록 보기
181/203
post-thumbnail

📚 Lv2 - 행렬 테두리 회전하기

행렬 테두리 회전하기

 

이해

이 문제는 무엇보다 회전하는 방법을 알고 있다면 쉽게 풀 수 있는 문제이다.

1 2 3
4 5 6
7 8 9

tmp = 4 저장
(1) 1 ~ 7
4 ← 7 

(2) 7 ~ 9
7 ← 8
8 ← 9

(3) 9 ~ 3
9 ← 6
6 ← 3

(4) 3 ~ 1
3 ← 2
2 ← 1

1 ← tmp

위 예시를 보면 회전 식을 알 수 있다.

시작 좌표 : x1, y1
끝 좌표 : x2, y2

tmp = arr[x1+1][y1]

(1) k : x1 + 1 부터 x2 - 1까지
arr[k][y1] = arr[k+1][y1]

(2) k : y1 부터 y2 - 1 까지
arr[x2][k] = arr[x2][k+1]

(3) k : x2 부터 x1 + 1까지 (-1씩 빼기)
arr[k][y2] = arr[k-1][y2]

(4) k : y2 부터 y1 + 1까지 (-1씩 빼기)
arr[x1][k] = arr[x1][k-1]

arr[x1][y1] = tmp

회전 식을 적용하면 답을 쉽게 구할 수 있다.

 

소스

def change_swap(x1, y1, x2, y2, arr):
    tmp = arr[x1+1][y1]
    result = arr[x1+1][y1]
    
    for k in range(x1 + 1, x2):
        arr[k][y1] = arr[k+1][y1]
        result = min(result, arr[k+1][y1])
    for k in range(y1, y2):
        arr[x2][k] = arr[x2][k+1]
        result = min(result, arr[x2][k+1])
    for k in range(x2, x1, -1):
        arr[k][y2] = arr[k-1][y2]
        result = min(result, arr[k-1][y2])
    for k in range(y2, y1, -1):
        arr[x1][k] = arr[x1][k-1]
        result = min(result, arr[x1][k-1])
    arr[x1][y1] = tmp
    return result

def solution(rows, columns, queries):
    answer = []
    
    arr = [[0] * (columns + 1) for _ in range(rows+1)]
    
    in_d = 1
    
    for i in range(1, rows+1):
        for j in range(1, columns + 1):
            arr[i][j] = in_d
            in_d += 1
    
    for q in queries:
        answer.append(change_swap(q[0], q[1], q[2], q[3], arr))
    
    return answer
스크린샷 2022-04-27 오전 12 27 14

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글