[파이썬] 프로그래머스 : 행렬 테두리 회전하기 (레벨2)
풀이
방향성 생각
- 덱을 이용해서 테두리 회전 구현하기.
전체코드
from collections import deque
def solution(H,W,commands):
# array 생성
arr = [[i*W+j+1 for j in range(W)] for i in range(H)]
# 0 based로 만들어주기
queries = []
for cmd in commands:
query = list(map(lambda x:x-1,cmd))
queries.append(query)
# 쿼리 실행
answer = []
for py,px,ny,nx in queries:
# 위치 index와 value를 담을 덱을 생성
index = deque()
value = deque()
# 테두리를 순서대로 읽어서 덱에 넣는다.
x,y = px,py
for dx in range(nx-px):
index.append((px+dx,y))
value.append(arr[y][px+dx])
for dy in range(ny-py):
index.append((nx,py+dy))
value.append(arr[py+dy][nx])
for dx in range(nx-px):
index.append((nx-dx,ny))
value.append(arr[ny][nx-dx])
for dy in range(ny-py):
index.append((px,ny-dy))
value.append(arr[ny-dy][px])
# 최솟값을 정답에 넣어주고
answer.append(min(value))
# index는 고정시키고 value를 회전시켜서 회전을 구현한다. % 연산자를 이용해도 무방방
value.rotate()
for (x,y),val in zip(index,value):
arr[y][x] = val
return answer
코멘트
테두리 회전, 배열 회전은 단골문제라서 익혀두기
'Algorithm > Simulation' 카테고리의 다른 글
[파이썬] 프로그래머스 : 프렌즈 4블록 (레벨2) (0) | 2025.03.22 |
---|---|
[파이썬] 백준 17822 : 원판 돌리기 (골드2) (0) | 2025.03.21 |
[파이썬] 프로그래머스 : 충돌 위험 찾기 (레벨2) (0) | 2025.03.19 |
[자바] SWEA 6109 : 추억의 2048 게임 (D4) (0) | 2025.03.09 |
[파이썬] SWEA 5644 : 무선 충전 (TEST) (0) | 2025.03.09 |
[자바] SWEA 2382 : 미생물 격리 (test) (0) | 2025.03.09 |
[자바] SWEA 1873 : 상호의 배틀필드 (D3) (0) | 2025.03.09 |
댓글