Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 2_행렬 테두리 회전하기 (2021 Dev-Match:웹 백엔드 개발자(상반기))
syunze
2023. 9. 26. 14:15
📌문제 유형
2021 Dev-Match:웹 백엔드 개발자(상반기) (완전탐색)
📌문제
📌나의 문제풀이
- 인덱스랑 움직이는거 헷갈릴 수 있어서 그림 필수
- 첫번째 가로는 왼쪽 위 제외하고 회전, 두번째 세로는 x1 다음 줄부터 x2 직전 줄까지 회전, 두번째 가로는 y2~y1 직전, 첫번째 세로는 x2~x1직후까지
- 주의 : 마지막 숫자 넣을 때, 가장 작은 값인지 확인하기(이거 안넣어서 틀렸음)
def solution(rows, columns, queries):
answer = []
# 행렬 만들기
maps = [[0 for _ in range(columns)] for _ in range(rows)]
for i in range(rows):
for j in range(columns):
maps[i][j] = i * columns + (j+1)
for x1,y1,x2,y2 in queries:
min_ = rows * columns
# (x1,y1,x2,y2) -> x1-1, y1-1로 접근하기
# 첫째줄 가로 변경
before_num = maps[x1-1][y1-1]
for k in range(y1, y2):
if before_num < min_:
min_ = before_num
next_num = maps[x1-1][k]
maps[x1-1][k] = before_num
before_num = next_num
# 둘째줄 세로 변경
for n in range(x1,x2-1):
if before_num < min_:
min_ = before_num
next_num = maps[n][y2-1]
maps[n][y2-1] = before_num
before_num = next_num
# 둘째줄 가로 변경
for m in range(y2-1,y1-1,-1):
if before_num < min_:
min_ = before_num
next_num = maps[x2-1][m]
maps[x2-1][m] = before_num
before_num = next_num
# 첫째줄 세로 변경
for l in range(x2-1, x1-1,-1):
if before_num < min_:
min_ = before_num
next_num = maps[l][y1-1]
maps[l][y1-1] = before_num
before_num = next_num
if before_num < min_:
min_ = before_num
maps[x1-1][y1-1] = before_num
answer.append(min_)
return answer
📌다른 사람의 문제풀이
- Stack(마지막에 넣은 것 먼저 뽑는 것) 이용해서 2개 전 값 빼기
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
📌리뷰
- 마지막 값도 최소값에 포함되었는지 확인하기
- 다른 사람들이 자주 하는 실수
- 초기배열 잘못 생성
728x90