프로그래머스 - 행렬 테두리 회전하기

박상진·2022년 2월 25일
0

프로그래머스

목록 보기
57/65
post-thumbnail

자세한 문제 설명은 링크 참고

행렬의 지정된 부분을 회전하는 문제이다.

풀이

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

    for i in range(rows) :
        matrix.append(list(range((i*columns)+1,(i*columns)+columns+1)))

    for a,b,c,d in queries :
        left_top = matrix[a-1][b-1]
        minimum = left_top

        for j in range(a, c) :
            move1 = matrix[j][b-1]
            matrix[j-1][b-1] = move1
            minimum = min(minimum,move1)

        for k in range(b, d) :
            move2 = matrix[c-1][k]
            matrix[c-1][k-1] = move2
            minimum = min(minimum,move2)

        for l in range(c, a, -1) :
            move3 = matrix[l-2][d-1]
            matrix[l-1][d-1] = move3
            minimum = min(minimum,move3)

        for m in range(d, b, -1) :
            move4 = matrix[a-1][m-2]
            matrix[a-1][m-1] = move4
            minimum = min(minimum,move4)

        matrix[a-1][b] = left_top
        answer.append(minimum)

    return answer
  1. 첫번째 포문으로 주어진 행렬 리스트를 만든다.
  2. 두번째 포문으로 행렬을 회전시킨다.
    • 포문 내에 첫번쨰 포문부터 순서대로 왼쪽 세로, 아래, 오른쪽 세로, 위에로 돌아간다.
    • 그림처럼 돌아가기 때문에 왼쪽 세로 기준으로 설명하면 순서대로 14가 8 자리에, 20이 14자리에, 26이 20자리에 들어가게 된다.
    • 그렇게 한바퀴를 돌면 8자리에 14가 있기 때문에, 맨 처음에 left_top으로 빼두었던 요소를 다시 넣어준다.
    • 매 포문마다 가장 작은 숫자를 남겨뒀기 때문에 제일 마지막에 answerappend해준다.
  3. 반복하면 끝

느낀점

  1. 시간이 매우 오래걸렸는데, 아이디어는 있어도 자리가 너무 헷갈려서 힘들었다.
  2. 맨 마지막에 오류가 떠서 왜그런지 한시간 넘게 고민을 했는데, 이유는 행렬 자체를 잘못 만들었기 때문이었다. column자리에 row를 넣어서 그랬었는데, 허무한 오류였다.. 잘 만들었기 때문에 의심하지 않았던게 시간을 많이 잡아먹었다.. 오류가 반복된다면, 가장 위에서부터 검사를 해봐야겠다..
profile
개발자가 되고싶당

0개의 댓글