1 분 소요

문제 링크

내 풀이

def solution(n, k, cmd):
    pyo = [i for i in range(n)]
    pos = k
    stack = []
    result = ['O'] * n
    for command in cmd:
        if command[0] == 'D':
            pos += int(command[2:])
        elif command[0] == 'U':
            pos -= int(command[2:])
        elif command == 'C':
            if pos != len(pyo)-1:
                del_num = pyo.pop(pos)
                stack.append(del_num) # 삭제 된 행 스택에 저장
                result[del_num] = 'X'
            else:
                del_num = pyo.pop(pos)
                stack.append(del_num) # 삭제 된 행 스택에 저장
                result[del_num] = 'X'
                pos -= 1  
        elif command == 'Z':
            a = stack.pop()
            pyo.insert(a,a)
            result[a] = 'O'
            if a < pos:
                pos += 1
            
    return ''.join(result)

정답 풀이

def solution(n, k, cmd):
    deleted = []
    up = [i-1 for i in range(n+2)]
    down = [i + 1 for i in range(n+1)]

    k += 1

    for cmd_i in cmd:
        if cmd_i.startswith("C"):
            deleted.append(k)
            up[down[k]] = up[k]
            down[up[k]] = down[k]
            k = up[k] if n < down[k] else down[k]

        elif cmd_i.startswith("Z"):
            restore = deleted.pop()
            down[up[restore]] = restore
            up[down[restore]] = restore

        else:
            action, num = cmd_i.split()
            if action == "U":
                for _ in range(int(num)):
                    k = up[k]
            else:
                for _ in range(int(num)):
                    k = down[k]
    answer = ["0"] * n
    for i in deleted:
        answer[i-1] = "X"
    return ''.join(answer)


댓글남기기