코딩테스트/프로그래머스

[프로그래머스][구현][Linked List] 표 편집

박소민 2025. 4. 3. 18:33
표 편집
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

  • 다른 사람 풀이
    • Linked List
def solution(n, k, cmd):
    answer = ["O"] * n
    deleted = []
    prev = {i: i - 1 for i in range(n)}  # 이전 행 연결
    next = {i: i + 1 for i in range(n)}  # 다음 행 연결
    next[n - 1] = -1  # 마지막 행의 다음을 -1로 설정
    prev[0] = -1  # 첫 번째 행의 이전을 -1로 설정

    for c in cmd:
        action = c.split()
        
        if action[0] == "U":
            x = int(action[1])
            for _ in range(x):
                k = prev[k]

        elif action[0] == "D":
            x = int(action[1])
            for _ in range(x):
                k = next[k]

        elif action[0] == "C":
            answer[k] = "X"
            deleted.append((k, prev[k], next[k]))

            if prev[k] != -1:  # 이전 행이 존재
                next[prev[k]] = next[k]
            if next[k] != -1:  # 다음 행이 존재
                prev[next[k]] = prev[k]

            k = next[k] if next[k] != -1 else prev[k]  # 삭제 후 다음 행으로 이동

        elif action[0] == "Z":
            z, prev_row, next_row = deleted.pop()
            answer[z] = "O"

            if prev_row != -1:
                next[prev_row] = z
            if next_row != -1:
                prev[next_row] = z

    return "".join(answer)