DevKim

[Python] LV.02 - 행렬 테두리 회전하기 본문

알고리즘 PS

[Python] LV.02 - 행렬 테두리 회전하기

on_doing 2021. 6. 30. 13:58
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

[ 알고리즘 ]

단순구현

 

[문제 접근]

문제를 보자마자 사각형을 기준으로 회전한다는 점에서, 삼성 기출 로봇청소기가 생각났다.

 

시작하는 행과 열의 기준을 정해주고 그 만큼 사각형을 회전해주면 된다.

매번 회전에 해당하는 숫자들을 리스트에 담아주고,

그 중의 최소값을 결과값에 담아주면 된다.

 

[코드]

def solution(rows, columns, queries):
    answer = []
    graph = []
    n = 1
    for i in range(rows):
        List = []
        for j in range(columns):
            List.append(n)
            n += 1
        graph.append(List)

    for i in range(len(queries)):
        cir = []
        x1 = queries[i][0] - 1
        y1 = queries[i][1] - 1
        x2 = queries[i][2] - 1
        y2 = queries[i][3] - 1

        x_cnt = x2 - x1
        y_cnt = y2 - y1

        start = graph[x1][y1]  # 임시저장

        xx = x1  # 1
        yy = y1  # 1

        for j in range(x_cnt):  
            xx += 1
            cir.append(graph[xx][yy])
            graph[xx - 1][yy] = graph[xx][yy]

        for j in range(y_cnt): 
            yy += 1  # 2
            cir.append(graph[xx][yy])
            graph[xx][yy - 1] = graph[xx][yy]
        
        for j in range(x_cnt):
            xx -= 1
            cir.append(graph[xx][yy])
            graph[xx + 1][yy] = graph[xx][yy]


        for j in range(y_cnt - 1):
            yy -= 1
            cir.append(graph[xx][yy])
            graph[xx][yy + 1] = graph[xx][yy]

        cir.append(start)
        graph[xx][yy] = start

        answer.append(min(cir))

    return answer
728x90
Comments