행렬과 연산
해설
Rotate
함수의 작성이 특히 어려웠는데 내가 이 문제를 통해서 배운점은 Queue
를 사용할 때 popleft()
를 하고 append()
를 하면 모든 순서를 바꿔줄 수 있다는 것이다.
부끄러워서 내 코드는 작성하지 않지만 나는 (x + 1) % y
와 같은 방법으로 인덱스를 구할려고 했는데 그게 생각처럼 잘 안됐다.
from collections import deque
def solution(rc, operations):
ROW = len(rc)
COLUMN = len(rc[0])
# 맨 왼쪽에 있는 컬럼들만 넣음
left_col = deque([rc[i][0] for i in range(ROW)])
# 맨 오른쪽에 있는 컬럼들만 넣음
right_col = deque([rc[i][COLUMN - 1] for i in range(ROW)])
# 외곽쪽에 있지 않은 컬럼들만 넣음
rows = deque([deque(rc[i][1:COLUMN - 1]) for i in range(ROW)])
for op in operations:
if op == 'ShiftRow':
# 각 컬럼들의 맨 앞부분에 맨 마지막 부분을 넣어줌
left_col.appendleft(left_col.pop())
rows.appendleft(rows.pop())
right_col.appendleft(right_col.pop())
else: # 'Rotate'
rows[0].appendleft(left_col.popleft())
right_col.appendleft(rows[0].pop())
rows[ROW - 1].append(right_col.pop())
left_col.append(rows[ROW - 1].popleft())
answer = []
for i in range(ROW):
answer.append([left_col[i]] + list(rows[i]) + [right_col[i]])
return answer