반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/77485
풀이
from collections import deque
def solution(rows, columns, queries):
answer = []
# 회전이 주어질때 바뀌는 위치의 범위
# 바꾸는 방법 : 이전 값을 다음값으로 옮기는 방법 rotate?
# 범위에 있던 숫자중 가장 작은 수
# 회전할 필요 없음 -> 각 위치가 있을때, 거기서 테두리를 뽑아내는 것과 거기서 제일 작은 값만 추출
# (2,2,5,4) 라면
# (x1,y1),(x1,y2),(x2,y1),(x2,y2)
# (x1,y1 ~ y2) , (x2 , y1 ~ y2)
# (x1 ~ x2 ,y1) , (x1 ~ x2 , y2)
# (x1, y1 ~ y2) , (x1~ x2, y2) , (x2 , y2 ~ y1), (x2 ~ x1 , y1)
# ()
# 세로는 7을 더하고 빼고 (columns + 1 ) 가로는 5를 더하고 빼고 (rows - 1)
board = []
cnt = 1
for i in range(1,rows+1):
lst = []
for j in range(1,columns+1):
lst.append(cnt)
cnt +=1
board.append(lst)
for x1,y1,x2,y2 in queries:
idx = deque()
num = deque()
for y in range(y1,y2+1):
idx.append((x1-1,y-1))
num.append(board[x1-1][y-1])
for x in range(x1+1,x2+1):
idx.append((x-1,y2-1))
num.append(board[x-1][y2-1])
for y in range(y2-1,y1-1,-1):
idx.append((x2-1,y-1))
num.append(board[x2-1][y-1])
for x in range(x2-1,x1,-1):
idx.append((x-1,y1-1))
num.append(board[x-1][y1-1])
num.rotate(1)
answer.append(min(num))
for dx,nu in zip(idx,num):
res = 10e19
x = dx[0]
y = dx[1]
board[x][y] = nu
return answer
1. 꼭짓점이 주어질때, 바뀌게 되는 테두리를 찾고 이를 리스트에 저장한다. 추가로, 해당위치의 값도 저장
2. 큐를 이용하여 rotate를 적용하면 한칸씩 밀려쓰기가 가능하다. 이를 저장된 위치에 다시 삽입한다.
3. (느낀점) 초반에 테두리를 찾자마자 이전위치의 값을 옆을 옮기는 식으로 할랬는데, 옮겨지면서 값이 바뀌게 되고 그값이 다시 옮겨지는 불상사가 발생하게 된다. 순서대로 옮기는 경우에서는 위치를 저장하고 값을 넣어주는 방법이 나을 것 같다.
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/LV3/이분탐색] 입국검사 (0) | 2023.12.15 |
---|---|
[프로그래머스/LV2/구현] 호텔 대실 (0) | 2023.12.13 |
[프로그래머스/구현/LV1] PCCP 기출문제 1번 (1) | 2023.12.06 |
[프로그래머스/그래프 탐색/LV2] 무인도 여행 (0) | 2023.12.06 |
[BOJ/완전탐색] 14888 연산자 끼워넣기 (0) | 2023.09.19 |