chyam

[프로그래머스 Lv3, python] - 표 편집 본문

프로그래머스/LV3

[프로그래머스 Lv3, python] - 표 편집

chyam_eun 2026. 7. 16. 16:36

 

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

 

프로그래머스

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

programmers.co.kr

 

def solution(n, k, cmd):
    answer = ['O']*n
    delete = []
    current = k # 현재 행
    
    prev = [i-1 for i in range(n)] # 이전 행
    next = [i+1 for i in range(n)] # 다음 행
    next[-1] = -1
    
    for c in cmd:
        tmp = c.split()
        if tmp[0] == "C": # 지우기
            # 삭제 정보를 저장
            delete.append((current, prev[current], next[current]))

            # 연결 끊기
            if prev[current] != -1: # 맨처음이 아님
                next[prev[current]] = next[current] # 다음꺼를 연결해줌

            if next[current] != -1: # 맨 뒤가 아님
                prev[next[current]] = prev[current] # 앞에꺼를 연결해줌

            # 현재 위치 이동
            if next[current] != -1: # 마지막이 아님 
                current = next[current] # 현재 행을 다음꺼로
            else:
                current = prev[current] # 현재 행을 앞꺼로
            
        elif tmp[0] == "Z": # 되돌리기
            node, p, nnode = delete.pop() # 현재 행, 앞행, 뒷행

            if p != -1: # 맨앞아님
                next[p] = node # 앞의 뒤를 현재 행으로

            if nnode != -1: # 맨뒤가 아님
                prev[nnode] = node # 뒤의 앞을 현재 행으로

            prev[node] = p  # 현재 행을 각각 연결
            next[node] = nnode 
            
        elif tmp[0] == "U": # X칸 위에 있는 행 선택
            x = int(tmp[1])
            for _ in range(x):
                current = prev[current]
                
        elif tmp[0] == "D": # X칸 아래에 있는 행 선택
            x = int(tmp[1])
            for _ in range(x):
                current = next[current]
            
    while delete:
        node, _, _ = delete.pop()
        answer[node] = 'X'

    return ''.join(answer)