Algorithm
프로그래머스
Python
행렬과 연산

행렬과 연산

해설

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

참조

https://velog.io/@kevin622/Programmers-%ED%96%89%EB%A0%AC%EA%B3%BC-%EC%97%B0%EC%82%B0-2022-KAKAO-TECH-INTERNSHIP (opens in a new tab)