[Programmers] 행렬 테두리 회전하기
🎈문제
https://programmers.co.kr/learn/courses/30/lessons/77485
💬설명
- 회전을 구현할 수 있냐고 물어보는 기본 구현 문제였다.
- 회전 방향을 dx, dy 배열로 선언해두고 direction + 1 해가면서 각 변의 길이만큼 회전해주면 된다. 처음 회전 문제를 풀어봤으면 헤맸을 수도
👩💻코드
# Programmers_행렬테두리회전.py
def rotate(arr, query):
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
x, y = query[0] - 1, query[1] - 1
pre_value = arr[x][y]
len_x = query[3] - query[1]
len_y = query[2] - query[0]
left = len_x
direction = 0
length = 2 * (len_x + 1) + 2 * (len_y + 1) - 4
min_value = pre_value
for _ in range(length):
nx = x + dx[direction]
ny = y + dy[direction]
# 최소값 갱신
min_value = min(min_value, arr[nx][ny])
# 변경할 자리에 있는 값 저장하고 변경
tmp = pre_value
pre_value = arr[nx][ny]
arr[nx][ny] = tmp
x = nx
y = ny
# 회전 정보 변경
left -= 1
if left == 0:
direction = (direction + 1) % 4
if direction == 0 or direction == 2:
left = len_x
else:
left = len_y
for a in arr:
print(a)
print()
return arr, min_value
def solution(rows, columns, queries):
answer = []
# 배열 초기화
arr = [[0 for _ in range(columns)] for _ in range(rows)]
num = 1
for i in range(rows):
for j in range(columns):
arr[i][j] = num
num += 1
# query 수행
for query in queries:
arr, smallest = rotate(arr, query)
answer.append(smallest)
return answer
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] 두 큐 합 같게 만들기 - python (0) | 2022.09.27 |
---|---|
[Programmers] 성격 유형 검사하기 - Python (0) | 2022.09.18 |
[BaekJoon] 백준 2638번 치즈 (0) | 2021.11.04 |
[BaekJoon] 백준 10159번 저울 (0) | 2021.11.04 |
[BaekJoon] 백준 11909번 배열 탈출 (0) | 2021.11.04 |