안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/77485
테두리 부분을 회전하는 문제였습니다.
이걸보니 생각나는 문제... 삼성 SW공채 코딩테스트 기출이었던 공기청정기 문제가 생각나네요.
(바로 이 문제 )
풀이
→ ↓ ← ↑
이렇게 4가지로 구분하여 구현했습니다.
문제에서 원하는 최솟값은 while 문을 돌면서 값을 찾았습니다.
def turn(array, a, b, c, d):
min_val = array[a][b]
# now
x, y = c, d
edge1 = array[a+1][b]
edge2 = array[a][d]
edge3 = array[c][d]
edge4 = array[c][b]
# →
while y > b:
array[a][y] = array[a][y-1]
min_val = min(min_val, array[a][y])
y -= 1
array[a][b] = edge1
# ↓
while x > a:
array[x][d] = array[x-1][d]
min_val = min(min_val, array[x][d])
x -= 1
array[a+1][d] = edge2
# ←
y = b
while y < d:
array[c][y] = array[c][y+1]
min_val = min(min_val, array[c][y])
y += 1
array[c][d-1] = edge3
# ↑
while x < c:
array[x][b] = array[x+1][b]
min_val = min(min_val, array[x][b])
x += 1
array[c-1][b] = edge4
return min(min_val, edge1, edge2, edge3, edge4)
def solution(rows, columns, queries):
result = []
array = []
for r in range(1, rows + 1):
array.append(list(range((r - 1) * columns + 1, r * columns + 1)))
for q in queries:
a, b, c, d = q
a -= 1
b -= 1
c -= 1
d -= 1
result.append(turn(array, a, b, c, d))
return result