📖 문제
https://programmers.co.kr/learn/courses/30/lessons/77485
💻 코드
from collections import deque
def solution(rows, columns, queries):
# 전체 보드 생성
M = [[columns * (r - 1) + c for c in range(1, columns + 1)] for r in range(1, rows + 1)]
result = []
for r1, c1, r2, c2 in queries:
q = deque()
# 테두리를 시계 방향으로 조회하며 값 저장 (deque 이용)
for c in range(c1, c2):
q.append(M[r1 - 1][c - 1])
for r in range(r1, r2):
q.append(M[r - 1][c2 - 1])
for c in range(c2, c1, -1):
q.append(M[r2 - 1][c - 1])
for r in range(r2, r1, -1):
q.append(M[r - 1][c1 - 1])
# 시계 방향으로 한 칸씩 밀기
q.appendleft(q.pop())
# 최솟값 저장
result.append(min(q))
# 테두리를 시계 방향으로 방문하며 값 갱신 (deque 이용)
for c in range(c1, c2):
M[r1 - 1][c - 1] = q.popleft()
for r in range(r1, r2):
M[r - 1][c2 - 1] = q.popleft()
for c in range(c2, c1, -1):
M[r2 - 1][c - 1] = q.popleft()
for r in range(r2, r1, -1):
M[r - 1][c1 - 1] = q.popleft()
return result
🙌 한마디
구현 문제였다. 테두리에 있는 값들을 시계 방향으로 한 칸씩 밀어야 했다.
먼저 deque에 시계 방향으로 값을 담은 후, 가장 마지막 원소를 pop해서 제일 앞에 appendleft하면 한 칸씩 밀린 순서대로 deque에 값들이 저장되고, 이 값들을 하나씩 popleft하며 테두리를 시계 방향으로 돌아 저장하는 방법으로 구현했다.
내가 구현했지만, 아이디어가 신선해서 재밌었다.
'Problem Solving > 📕Programmers' 카테고리의 다른 글
[Programmers] 헤비 유저가 소유한 장소 (SQL) (0) | 2021.11.17 |
---|---|
[Programmers] 다단계 칫솔 판매 (Python) (0) | 2021.11.17 |
[Programmers] 로또의 최고 순위와 최저 순위 (Python) (0) | 2021.11.17 |
[Programmers] 멀리 뛰기 (Python) (0) | 2021.10.20 |
[Programmers] 압축 (Python) (0) | 2021.10.18 |