[프로그래머스] 행렬 테두리 회전하기 - 파이썬/구현

JinUk Lee·2023년 3월 21일
0

프로그래머스

목록 보기
25/46

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


def solution(rows, columns, queries):
    answer = []

    # 숫자 리스트를 잘라서 이차원 그래프로 만듬
    num_list = [ i for i in range(1,rows*columns+1)]
    graph = []
    for i in range(rows):
        graph.append(num_list[i*columns:(i+1)*columns])


    for q in queries:

        x1,y1,x2,y2 = q

        rev_list = [] # 테두리의 좌표를 담을 리스트

        for i in range(y1,y2):

            rev_list.append((x1,i))

        for i in range(x1,x2):

            rev_list.append((i,y2))

        for i in range(y2,y1,-1):

            rev_list.append((x2,i))

        for i in range(x2,x1,-1):

            rev_list.append((i,y1))

        value_list = [] # 테두리의 값을 담을 리스트
        
        # 테두리 리스트를 완성해줌
        for i in rev_list:
            value = graph[i[0]-1][i[1]-1]
            value_list.append(value)


        answer.append(min(value_list)) # 출력해야하는 최솟값을 answer에 넣어줌

        # 테두리를 한칸 회전시켜줌
        elem = rev_list.pop(0)
        rev_list.append(elem)

        # 회전된 좌표를 값과 매칭해줌
        for i in range(len(rev_list)):
            graph[rev_list[i][0]-1][rev_list[i][1]-1] = value_list[i]


    return answer

파이썬에서 회전은 일차원 리스트에 담아서 돌려준뒤 매칭시켜주면 된다.

예를 들어서 3X3 행렬에서 가운데를 제외한 테두리 전체를 돌린다고 생각해보자.

(1,1)을 기준으로 테두리의 좌표는

[(1,1),(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1)]

이고 실제 값은 [1,2,3,6,9,8,7,4] 일 것이다.

테두리를 시계방향으로 한칸 돌리면

[(1,1),(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1)] = [1,2,3,6,9,8,7,4]

이렇게 매칭되는 것이

[(1,2),(1,3),(2,3),(3,3),(3,2),(3,1),(2,1),(1,1)] = [1,2,3,6,9,8,7,4]

이렇게 변하는 것이다.

profile
개발자 지망생

0개의 댓글