728x90
나의 풀이
def solution(rows, columns, queries):
matrix = [[0] * columns for _ in range(rows)]
answer = []
for i in range(rows):
for j in range(columns):
matrix[i][j] = i * columns + j + 1
for x1, y1, x2, y2 in queries:
x, y = x1 - 1, y1 - 1
temp = matrix[x][y]
route = []
for _ in range(y2 - y1):
route.append(matrix[x][y])
matrix[x][y], temp = temp, matrix[x][y]
y += 1
for _ in range(x2 - x1):
route.append(matrix[x][y])
matrix[x][y], temp = temp, matrix[x][y]
x += 1
for _ in range(y2 - y1):
route.append(matrix[x][y])
matrix[x][y], temp = temp, matrix[x][y]
y -= 1
for _ in range(x2 - x1 + 1):
route.append(matrix[x][y])
matrix[x][y], temp = temp, matrix[x][y]
x -= 1
answer.append(min(route))
return answer
deque.rotate 를 이용한 풀이
from collections import deque
def solution(rows, columns, queries):
arr = [[i+columns*j for i in range(1,columns+1)] for j in range(rows)]
answer, result = deque(), []
for i in queries:
a,b,c,d = i[0]-1,i[1]-1,i[2]-1,i[3]-1
for x in range(d-b):
answer.append(arr[a][b+x])
for y in range(c-a):
answer.append(arr[a+y][d])
for z in range(d-b):
answer.append(arr[c][d-z])
for k in range(c-a):
answer.append(arr[c-k][b])
answer.rotate(1)
result.append(min(answer))
for x in range(d-b):
arr[a][b+x] = answer[0]
answer.popleft()
for y in range(c-a):
arr[a+y][d] = answer[0]
answer.popleft()
for z in range(d-b):
arr[c][d-z] = answer[0]
answer.popleft()
for k in range(c-a):
arr[c-k][b] = answer[0]
answer.popleft()
return result
stack을 이용한 풀이
def solution(rows, columns, queries):
answer = []
board = [[i+(j)*columns for i in range(1,columns+1)] for j in range(rows)]
# print(board)
for a,b,c,d in queries:
stack = []
r1, c1, r2, c2 = a-1, b-1, c-1, d-1
for i in range(c1, c2+1):
stack.append(board[r1][i])
if len(stack) == 1:
continue
else:
board[r1][i] = stack[-2]
for j in range(r1+1, r2+1):
stack.append(board[j][i])
board[j][i] = stack[-2]
for k in range(c2-1, c1-1, -1):
stack.append(board[j][k])
board[j][k] = stack[-2]
for l in range(r2-1, r1-1, -1):
stack.append(board[l][k])
board[l][k] = stack[-2]
answer.append(min(stack))
return answer
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/파이썬] 괄호 변환 (0) | 2022.06.11 |
---|---|
[프로그래머스/파이썬] 메뉴 리뉴얼 (0) | 2022.06.11 |
[프로그래머스/파이썬] 짝지어 제거하기 (0) | 2022.06.10 |
[프로그래머스/파이썬] 멀쩡한 사각형 (0) | 2022.06.09 |
[프로그래머스/파이썬] 오픈채팅방 (0) | 2022.06.09 |