- main에 모두 사용하면 너무 복잡해질거 같아 rotate 함수 만들어 둠.
- 다음 예제에서는 먼저 왼쪽 위의 8을 따로 저장해둔 다음 반시계방향으로 한칸씩 밀리도록 구현한 뒤, 마지막 숫자인 8을 따로 [x1, y1+1]에 저장해두면 회전이 완료된다.
- 회전 과정에서는 매 순간 최솟값을 갱신해 주고, 회전이 종료되면 최솟값을 리턴한다.
def rotate(matrix, x1, y1, x2, y2):
minvalue = 999999999
last = matrix[x1][y1]
for i in range(x1, x2):
matrix[i][y1] = matrix[i+1][y1]
minvalue = min(minvalue, matrix[i+1][y1])
for j in range(y1, y2):
matrix[x2][j] = matrix[x2][j+1]
minvalue = min(minvalue, matrix[x2][j+1])
for i in range(x2-1, x1-1, -1):
matrix[i+1][y2] = matrix[i][y2]
minvalue = min(minvalue, matrix[i][y2])
for j in range(y2-1, y1, -1):
matrix[x1][j+1] = matrix[x1][j]
minvalue = min(minvalue, matrix[x1][j])
matrix[x1][y1+1] = last
minvalue = min(minvalue, last)
return minvalue
def solution(rows, columns, queries):
answer = []
matrix = [[0] * (columns + 1) for _ in range(rows + 1)]
for i in range(1, rows+1):
for j in range(1, columns+1):
matrix[i][j] = columns*(i-1)+j
for query in queries:
answer.append(rotate(matrix, query[0], query[1], query[2], query[3]))
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 전화번호 목록 (0) | 2021.06.23 |
---|---|
[ Lv 2 ] 프린터 (0) | 2021.06.23 |
[ Lv 2 ] 가장 큰 수 (0) | 2021.06.22 |
[ Lv 2 ] 뉴스 클러스터링 (0) | 2021.06.22 |
[ Lv 2 ] 게임 맵 최단거리 (0) | 2021.06.22 |