본문 바로가기

프로그래머스 풀이

프로그래머스 2단계 - 행렬 테두리 회전하기(Python)

깃허브:

https://github.com/MSIQOC/Programmers/blob/main/%ED%96%89%EB%A0%AC%ED%85%8C%EB%91%90%EB%A6%AC%ED%9A%8C%EC%A0%84%ED%95%98%EA%B8%B0.py

 

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

핵심은 행렬을 돌리는거였는데 나는 이전 숫자를 알려주는 prev와 다음 숫자를 알려주는 nex 변수를 써서 구현했다. 위의 예제로 보면 맨 처음 prev를 8로 저장시켜주고 nex변수에 9를 저장시킨 다음에 원래 9였던 곳을 prev에 저장된 변수 8로 저장시켜준다. 그 다음에 prev에 nex를 대입해주고 다음에도 계속 동일한 과정을 반복하면 된다.

 
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
39
40
41
42
43
44
"""
Created by MinSeo on 2021/09/19.
Copyright ⓒ 2021 MinSeo Shin. All rights reserved.
 
"""
def solution(rows, columns, queries):
    answer = []
    graph = [[0* columns for _ in range(rows)]
    cnt = 1
    for i in range(rows):
        for j in range(columns):
            graph[i][j] = cnt
            cnt += 1
    for i in range(len(queries)):
        x1 = queries[i][0- 1
        y1 = queries[i][1- 1
        x2 = queries[i][2- 1
        y2 = queries[i][3- 1
        arr = []
        prev = graph[x1][y1]
        nex = 0
        for j in range(y1+1, y2+1):
            nex = graph[x1][j]
            graph[x1][j] = prev
            prev = nex
            arr.append(prev)
        for j in range(x1+1, x2+1):
            nex = graph[j][y2]
            graph[j][y2] = prev
            prev = nex
            arr.append(prev)
        for j in range(y2-1, y1-1-1):
            #print("j",j)
            nex = graph[x2][j]
            graph[x2][j] = prev
            prev = nex
            arr.append(prev)
        for j in range(x2-1, x1-1-1):
            nex = graph[j][y1]
            graph[j][y1] = prev
            prev = nex
            arr.append(prev)
        answer.append(min(arr))
    return answer
cs