2021 카카오 하계 인턴쉽 출제 문제 - 표편집

2021 카카오 하계 인턴쉽 출제 문제

표 편집

문제 설명

https://programmers.co.kr/learn/courses/30/lessons/81303

class Node:
    def __init__(self, val):
        self.val = val
        self.prev_node = None
        self.next_node = None
        
def solution(n, k, cmd):
    root = Node(0)
    prev_node = root
    for num in range(1, n):
        temp = Node(num)
        prev_node.next_node = temp
        temp.prev_node = prev_node
        prev_node = temp

    current_node = root
    for _ in range(k):
        current_node = current_node.next_node

    history = []

    for operation in cmd:
        if len(operation) > 1:
            operator, num = operation.split(' ')
            for _ in range(int(num)):
                current_node = current_node.prev_node if operator == "U" else current_node.next_node       
        else:
            if operation == "C":
                history.append(current_node)
                if current_node.prev_node is None:
                    current_node.next_node.prev_node = None
                    current_node = current_node.next_node
                    root = current_node
                else:
                    if current_node.next_node:
                        current_node.next_node.prev_node = current_node.prev_node
                        current_node.prev_node.next_node = current_node.next_node
                        current_node = current_node.next_node
                    else:
                        current_node.prev_node.next_node = None
                        current_node = current_node.prev_node
            else:
                deleted_node = history.pop()
                if deleted_node.prev_node is None:
                    deleted_node.next_node = root
                    root.prev_node = deleted_node
                    root = root.prev_node
                else:
                    if deleted_node.next_node:
                        deleted_node.next_node.prev_node = deleted_node
                        deleted_node.prev_node.next_node, deleted_node.next_node = deleted_node, deleted_node.prev_node.next_node
                    else:
                        deleted_node.prev_node.next_node, deleted_node.next_node = deleted_node, deleted_node.prev_node.next_node
        
    answer= ""
    while root:
        answer += "X"*(root.val - len(answer))
        answer += "O"
        root = root.next_node
    answer += "X"*(n - len(answer))
    return answer