티스토리 뷰

728x90

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

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

  • 해설 :

1부터 row * column의 값으로 채워진 2차 행렬과 회전시킬 테두리의 x1,y1,x2,y2 좌표가 주어질 때, 이 행렬의 테두리를 회전시키며 변경된 값 중에 가장 작은 값을 찾는 문제이다

 

 

 

  • 풀이 :

행렬을 회전시킬 때 테두리 4개에 대해 회전하는 로직을 구현하였다. 이 때, 겹치는 부분인 각 꼭짓점은 따로 저장을 하여 겹치는 문제가 발생하지 않게 하였고 회전시키는 for문이 돌아갈 때 min 값을 매 번 초기화시켜 최솟값을 구하였다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def solution(rows, columns, queries):
 
    answer = []
    array = [[0 for col in range(columns)] for row in range(rows)]
    t = 1
    for row in range(rows):
        for col in range(columns):
            array[row][col] = t
            t += 1
 
    for x1,y1,x2,y2 in queries:
        tmp = array[x1-1][y1-1]
        mini = tmp
 
        for k in range(x1-1,x2-1):
            test = array[k+1][y1-1]
            array[k][y1-1= test
            mini = min(mini, test)
 
        for k in range(y1-1,y2-1):
            test = array[x2-1][k+1]
            array[x2-1][k] = test
            mini = min(mini, test)
 
        for k in range(x2-1,x1-1,-1):
            test = array[k-1][y2-1]
            array[k][y2-1= test
            mini = min(mini, test)
 
        for k in range(y2-1,y1-1,-1):
            test = array[x1-1][k-1]
            array[x1-1][k] = test
            mini = min(mini, test)
 
        array[x1-1][y1] = tmp
        answer.append(mini)
 
    return answer
cs
320x100
댓글
© 2022 WonSeok, All rights reserved