이숭간 공부기록
[프로그래머스] 파이썬 _ 행렬 테두리 회전하기 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/77485
문제유형 : 행렬, 구현
문제풀이 :
- 2021 카카오페이인턴에서도 이런 행렬구현 문제가나왔다. 행렬의 부분을 따로빼서 조작하고 다시 붙인뒤 반복조작하는 느낌
- 카카오공채 '자물쇠와 열쇠' 코드도 딱 이런 느낌이다.
- 쿼리에 맞춰서 부분그래프를 빼낸다음 뺸 부분을 규칙에 맞게 테두리만 회전시킨다.
- 회전시킨 그래프를 다시 원래그래프에 넣는다.
- 쿼리가 끝날때까지 반복한다.
정답코드 :
def solution(rows, columns, queries):
global answer
answer = []
graph = [[0] * columns for i in range(rows)]
num = 1
for i in range(rows):
for j in range(columns):
graph[i][j] = num
num += 1
# 쿼리에 맞춰서 부분그래프를 빼낸다음
# 이동한 부분을 다시 집어넣는다.
# 반복
for q in queries:
temp = []
s_x, s_y, e_x, e_y = q[0]-1, q[1]-1, q[2]-1, q[3]-1
for line in graph[s_x:e_x+1]:
temp.append(line[s_y:e_y+1])
new_graph = rotate_outline(temp, len(temp[0]), len(temp))
for i in range(len(temp)):
for j in range(len(temp[0])):
graph[i+s_x][j+s_y] = new_graph[i][j]
return answer
def rotate_outline(graph, n, m):
global answer
new_graph = [[0]*n for _ in range(m)]
min_val = int(1e4)
for i in range(m):
for j in range(n):
val = graph[i][j]
if i == 0 and j < n - 1:
new_graph[i][j + 1] = val
elif i < m - 1 and j == n - 1:
new_graph[i + 1][j] = val
elif i == m - 1 and j > 0:
new_graph[i][j - 1] = val
elif i > 0 and j == 0:
new_graph[i - 1][j] = val
else:
new_graph[i][j] = val
continue
min_val = min(min_val, val)
answer.append(min_val)
return new_graph
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] SQL고득점킷 _ SELECT (0) | 2021.08.09 |
---|---|
[프로그래머스] 파이썬 _ 순위 (0) | 2021.08.05 |
[프로그래머스] 파이썬 _ 게임 맵 최단거리 (0) | 2021.08.03 |
[프로그래머스] 파이썬 _ 조이스틱 (0) | 2021.08.03 |
[프로그래머스] 파이썬 _ 예상 대진표 (토너먼트) (0) | 2021.07.18 |