import sys
def solution(rows, columns, queries):
arr = [[(i)*columns+(j+1) for j in range(columns)] for i in range(rows)]
result = []
for x1, y1, x2, y2 in queries:
result.append(change(x1-1, y1-1, x2-1, y2-1, arr))
return result
def change(x1, y1, x2, y2, arr):
min_value = sys.maxsize
# 맨 위의 맨 왼쪽 값을 기록
temp = arr[x1][y1]
# 왼쪽
for k in range(x1, x2):
arr[k][y1] = arr[k+1][y1]
min_value = min(min_value, arr[k+1][y1])
# 아래
for k in range(y1, y2):
arr[x2][k] = arr[x2][k+1]
min_value = min(min_value, arr[x2][k+1])
# 오른쪽
for k in range(x2, x1, -1):
arr[k][y2] = arr[k-1][y2]
min_value = min(min_value, arr[k-1][y2])
# 위
for k in range(y2, y1+1, -1):
arr[x1][k] = arr[x1][k-1]
min_value = min(min_value, arr[x1][k-1])
# 기록했던 값 업데이트
arr[x1][y1+1] = temp
min_value = min(min_value, temp)
return min_value
풀이
1. 배열을 정의해준다.
2. change(x1, y1, x2, y2) : x1, y1 에서 x2, y2 까지의 행렬 테두리 시계방향으로 한번 회전
- min_value : 이동한 숫자 중에서 가장 작은 값
- 테두리 이동, min_value 초기화
- min_value 리턴
3. result : 각 회전 마다 움직인 가장 작은 숫자들의 집합
4. result 리턴
한 꼭지점의 자리를 기억해 두고, 나머지는 전부 대입을 진행
이후, 기억해둔 값을 적절한 위치에 대입을 해주면 매번 값을 기억했다가 바꾸어줄 필요가 없다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 - 괄호 변환 (파이썬) (0) | 2022.04.01 |
---|---|
[프로그래머스] Lv2 - 메뉴 리뉴얼 (파이썬) (0) | 2022.03.31 |
[프로그래머스] Lv2 - 짝지어 제거하기 (파이썬) (0) | 2022.03.30 |
[프로그래머스] Lv2 - 124 나라의 숫자 (파이썬) (0) | 2022.03.30 |
[프로그래머스] Lv2 - 멀쩡한 사각형 (파이썬) (0) | 2022.03.29 |