728x90
https://programmers.co.kr/learn/courses/30/lessons/77485
출처 : 프로그래머스
풀이
matrix을 초기화 한다.
초기화 하는 방법은 어렵지 않다.
위의 그림은 회전 그림이다.
(x1, y1, x2, y2) 기준으로 회전을 한다.
처음에 노랗게 칠한 (2,2)을 tmp_min 변수에 저장한다.
왼쪽부터 아래에 있는 것을 하나씩 위로 올린다.
왼쪽, 아래, 오른쪽, 위 순서대로 회전 코드를 썼다.
하나씩 밀다보면 matrix[x1][y1+1] 가 비어서 여기에 처음에 저장한 tmp_min을 넣어준다.
또, 주의할 점은 오른쪽과 위의 요소를 밀 때, 포문을 역순으로 돌아야 한다.
코드
def solution(rows, columns, queries):
answer = []
matrix = [[0 for c in range(columns + 1)] for r in range(rows + 1)] # 초기화
# 아무 회전도 안했을 때
n = 1
for i in range(1, rows + 1):
for j in range(1, columns + 1):
matrix[i][j] = n
n += 1
for x1, y1, x2, y2 in queries:
tmp_min = matrix[x1][y1]
tmp_copy = tmp_min
# 회전
for k in range(x1, x2): # 왼쪽
tmp = matrix[k+1][y1]
matrix[k][y1] = tmp
tmp_copy = min(tmp_copy, tmp)
for k in range(y1, y2): # 아래
tmp = matrix[x2][k+1]
matrix[x2][k] = tmp
tmp_copy = min(tmp_copy, tmp)
for k in range(x2, x1, -1): # 오른쪽
tmp = matrix[k-1][y2]
matrix[k][y2] = tmp
tmp_copy = min(tmp_copy, tmp)
for k in range(y2, y1, -1): # 위
tmp = matrix[x1][k-1]
matrix[x1][k] = tmp
tmp_copy = min(tmp_copy, tmp)
# 회전 마치고 바꾸기
matrix[x1][y1+1] = tmp_min
answer.append(tmp_copy)
return answer
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 순위 검색 python (*) (0) | 2022.05.28 |
---|---|
[프로그래머스] 조이스틱 python (*) (0) | 2022.05.28 |
[프로그래머스] 피로도 python (0) | 2022.05.26 |
[프로그래머스] 소수 찾기 (level2) python (0) | 2022.05.25 |
[프로그래머스] [3차] 압축 python (*) (0) | 2022.04.28 |