문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/118670
2022 카카오 여름 인턴십 코테 마지막 5번 문제. 당시에는 어떻게 풀어야할 지 감이 오지 않다가 deque를 정말 신박하게 짜서 풀었던 사람 후기를 보고 감탄했었는데, 오랜만에 그 풀이를 떠올려 다시 풀어보았다.
공식 해설에서도 같은 접근법을 제시하였다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |