본문 바로가기

알고리즘 문제풀이/프로그래머스

행렬과 연산

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/118670

 

2022 카카오 여름 인턴십 코테 마지막 5번 문제. 당시에는 어떻게 풀어야할 지 감이 오지 않다가 deque를 정말 신박하게 짜서 풀었던 사람 후기를 보고 감탄했었는데, 오랜만에 그 풀이를 떠올려 다시 풀어보았다. 

 

공식 해설에서도 같은 접근법을 제시하였다.

 

 

def solution(rc, operations):
from collections import deque
n, m = len(rc), len(rc[0])
l_deque, r_deque, m_deque = [], [], []
for i in range(n):
l_deque.append(rc[i][0])
r_deque.append(rc[i][-1])
m_deque.append(deque(rc[i][1:-1]))
l_deque = deque(l_deque)
r_deque = deque(r_deque)
m_deque = deque(m_deque)
for oper in operations:
if oper == "ShiftRow":
l_deque.appendleft(l_deque.pop())
m_deque.appendleft(m_deque.pop())
r_deque.appendleft(r_deque.pop())
else: #"Rotate"
m_deque[0].appendleft(l_deque.popleft())
r_deque.appendleft(m_deque[0].pop())
m_deque[-1].append(r_deque.pop())
l_deque.append(m_deque[-1].popleft())
sol = []
for i in range(n):
tmp = [l_deque[i]] + list(m_deque[i]) + [r_deque[i]]
sol.append(tmp)
return sol

'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글

자물쇠와 열쇠  (0) 2022.09.20
문자열 압축  (0) 2022.09.20
무지의 먹방 라이브  (0) 2022.09.16
호텔 방 배정  (0) 2020.08.12