본문 바로가기
Programming Test/문제풀이

[문제 풀이 11] 프로그래머스 - 표 편집

by muns91 2024. 4. 13.
표 편집

 

  • 문제 유형 : Linked List, Stack
  • 사용언어 : Python
  • 난이도 : LV. 3
  • 출처 : 프로그래머스

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(n, k, cmd):
    state = ["O"] * n

    # 링크드 리스트 구성 요소
    nodes = {i: {'prev': i-1, 'next': i+1} for i in range(n)}
    nodes[0]['prev'] = None
    nodes[n-1]['next'] = None

    # 초기 위치 설정
    current = k

    recycle_bin = []

    for command in cmd:
        if command[0] == "D":  # Down
            move = int(command.split()[1])
            for _ in range(move):
                if nodes[current]['next'] is not None:
                    current = nodes[current]['next']
        elif command[0] == "U":  # Up
            move = int(command.split()[1])
            for _ in range(move):
                if nodes[current]['prev'] is not None:
                    current = nodes[current]['prev']
        elif command == "C":  # Delete
            state[current] = "X"
            recycle_bin.append(current)
            prev_node = nodes[current]['prev']
            next_node = nodes[current]['next']

            if prev_node is not None:
                nodes[prev_node]['next'] = next_node
            if next_node is not None:
                nodes[next_node]['prev'] = prev_node

            current = next_node if next_node is not None else prev_node

        elif command == "Z":  # Undo delete
            node = recycle_bin.pop()
            state[node] = "O"
            prev_node = nodes[node]['prev']
            next_node = nodes[node]['next']

            if prev_node is not None:
                nodes[prev_node]['next'] = node
            if next_node is not None:
                nodes[next_node]['prev'] = node

    result = ''.join(state)

    return result
반응형