Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[프로그래머스] Lv.2 행렬 테두리 회전하기 [Python, 파이썬] 본문
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77485
- 🔑 테두리를 회전하는 방법
- 현재 위치의 값을 다음 위치로 옮기기 X
- 현재 위치에 이전 위치의 값을 옮기기 O
- 먼저 시작 위치의 값은 따로 저장을 해야 함
- 1. 왼쪽 테두리
- 현재 행 아래쪽의 값을 현재 행으로 당김
- board[r][c1] = board[r+1][c1]
- 이때 시작 위치의 값이 사라지기 때문에 따로 저장해 둔 것
- 2. 아래쪽 테두리
- 현재 열 오른쪽의 값을 현재 열로 당김
- board[r2][c] = board[r2][c+1]
- 3. 오른쪽 테두리
- 현재 행 위쪽의 값을 현재 행으로 당김
- board[r][c2] = board[r-1][c2]
- 4. 위쪽 테두리
- 현재 열 왼쪽의 값을 현재 열로 당김
- board[r1][c] = board[r1][c-1]
- 5. 시작 위치 바로 오른쪽 열에는 미리 저장해 둔 값을 넣음
- 2, 2 가 시작 위치면 2, 3에 저장한 값 넣음
- 위 과정을 진행하면서 계속 최솟값을 업데이트하고 query가 끝날 때마다 정답에 추가하면 끝 ✨
def solution(rows, columns, queries):
answer = []
board = []
n = 1
for i in range(rows): # 2차원 리스트 만들기
board.append(list(range(n, n+columns)))
n += columns
for q in queries:
r1 = q[0] - 1 # 시작 행
c1 = q[1] - 1 # 시작 열
r2 = q[2] - 1 # 끝 행
c2 = q[3] - 1 # 끝 열
start = board[r1][c1] # 시작 위치 번호 저장
min_num = start # 최솟값
for r in range(r1, r2): # 왼쪽 테두리
board[r][c1] = board[r+1][c1]
min_num = min(min_num, board[r][c1])
for c in range(c1, c2): # 아래쪽 테두리
board[r2][c] = board[r2][c+1]
min_num = min(min_num, board[r2][c])
for r in range(r2, r1, -1): # 오른쪽 테두리
board[r][c2] = board[r-1][c2]
min_num = min(min_num, board[r][c2])
for c in range(c2, c1, -1): # 위쪽 테두리
board[r1][c] = board[r1][c-1]
min_num = min(min_num, board[r1][c])
board[r1][c1+1] = start # 시작 위치 다음 열에는 저장한 값으로
answer.append(min_num)
return answer
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.3 야근 지수 [Python, 파이썬] (0) | 2023.12.14 |
---|---|
[프로그래머스] Lv. 2 할인 행사 [Python, 파이썬] (0) | 2023.12.14 |
[프로그래머스] Lv.2 순위 검색 [Python, 파이썬] KAKAO (2) | 2023.11.25 |
[프로그래머스] PCCP 기출 문제 2번 [Python, 파이썬] (0) | 2023.11.06 |
[ 프로그래머스] PCCP 기출 문제 1번 [Python, 파이썬] (0) | 2023.11.06 |
Comments