행렬의 지정된 부분을 회전하는 문제이다.
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
- 첫번째 포문으로 주어진 행렬 리스트를 만든다.
- 두번째 포문으로 행렬을 회전시킨다.
- 포문 내에 첫번쨰 포문부터 순서대로 왼쪽 세로, 아래, 오른쪽 세로, 위에로 돌아간다.
그림처럼 돌아가기 때문에 왼쪽 세로 기준으로 설명하면 순서대로 14가 8 자리에, 20이 14자리에, 26이 20자리에 들어가게 된다.
- 그렇게 한바퀴를 돌면 8자리에 14가 있기 때문에, 맨 처음에
left_top
으로 빼두었던 요소를 다시 넣어준다.- 매 포문마다 가장 작은 숫자를 남겨뒀기 때문에 제일 마지막에
answer
로append
해준다.- 반복하면 끝
- 시간이 매우 오래걸렸는데, 아이디어는 있어도 자리가 너무 헷갈려서 힘들었다.
- 맨 마지막에 오류가 떠서 왜그런지 한시간 넘게 고민을 했는데, 이유는 행렬 자체를 잘못 만들었기 때문이었다. column자리에 row를 넣어서 그랬었는데, 허무한 오류였다.. 잘 만들었기 때문에 의심하지 않았던게 시간을 많이 잡아먹었다.. 오류가 반복된다면, 가장 위에서부터 검사를 해봐야겠다..