반응형

문제풀이

1. 주어진 크기에 맞는 초기 행렬을 만들어줍니다.

2. 쿼리를 하나씩 실행하는데, 각 쿼리에 맞게 테두리를 시계방향으로 회전시켜주고, 테두리 값 중 최솟값을 answer 리스트에 넣습니다.

    * 맨 윗줄의 회전을 예로 들면, a[r][c+1]를 a[r][c]로 바꿔주면 됩니다.

    2-1. a[r][c]의 값을 tmp로, a[r][c+1]의 값을 tmp2로 저장해둡니다.

    2-2. a[r][c+1]을 tmp, 즉 a[r][c]로 바꿔줍니다.

    2-3. tmp의 값을 tmp2로 바꿔준 후, 다음 c에 대하여 반복합니다. 다만, 첫 단계를 제외한 단계에서는 tmp값을 이미 바꿔야할 열의 이전 열의 값으로 바꿨으므로 tmp2에 대해서만 진행해줍니다.(tmp 값이 이미 a[r][c]입니다.)

Python Code

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
# https://programmers.co.kr/learn/courses/30/lessons/77485
def solution(rows, columns, queries):
    answer = []
    v=0
    matrix = []
    # 초기행렬 행성
    for r in range(rows):
        tmp=[]
        for c in range(columns):
            v+=1
            tmp.append(v)
        matrix.append(tmp)
    for query in queries :
        answer.append(rotate(matrix, query))
    return answer
 
# 행렬을 회전하며 회전한 요소 중 최솟값 반환
def rotate(matrix, query):
    r1,c1,r2,c2=[q-1 for q in query]
    tmp=matrix[r1][c1]
    minn = tmp
    for c in range(c1+1,c2+1):
        tmp2=matrix[r1][c]
        matrix[r1][c] = tmp
        tmp=tmp2
        minn=min(minn,tmp)
    for r in range(r1+1,r2+1):
        tmp2=matrix[r][c2]
        matrix[r][c2] = tmp
        tmp=tmp2
        minn=min(minn,tmp)
    for c in range(c2-1,c1-1,-1):
        tmp2=matrix[r2][c]
        matrix[r2][c] = tmp
        tmp=tmp2
        minn=min(minn,tmp)
    for r in range(r2-1,r1-1,-1):
        tmp2=matrix[r][c1]
        matrix[r][c1] = tmp
        tmp=tmp2
        minn=min(minn,tmp)
    return minn
cs

문제링크

 

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

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

 

반응형

+ Recent posts