표 편집

210708

def solution(n, k, cmd):
    lst = ["O"] * n
    top = n-1
    remove = []
    for c in cmd:
        if c == "C":
            remove.append(k)
            lst[k] = "X"
            drt = 2 * (top != k) - 1
            while lst[k+drt] == "X":
                k += drt
            k += drt
            while lst[top] == "X":
                top -= 1
        elif c == "Z":
            idx = remove.pop()
            lst[idx] = "O"
            top = max(idx, top)
        else:
            move, steps = c.split()
            steps = int(steps)
            drt = 2 * (move == "D") - 1
            while steps:
                k += drt
                steps -= lst[k] == "O"

        #print(c, lst, remove, top, k)
    
    return ''.join(lst)

실제 리스트로 이것을 구현하면 100% 시간초과 날 것을 예상했다. 그래서 각 리스트의 상태를 기억할 수 있도록 구조를 짰다. 굉장히 좋은 풀이라고 생각했는데 효율성에서 에러가 났다. (아마 실제 인턴십 코테에서도 저랬던 것 같다)

결국 연결리스트 구조를 구현해야 할 것 같다는 직감을 느꼈다. (보통 이런 문제가 나오면 클래스로 구현하는 사람들이 있는데 대단하다. 난 그 정도 수준은 아닌 듯)

그리고 참고로, 이 문제를 두번째로 풀었다! 오늘 새로운 문제가 나왔더라고. 첫번째로 풀고싶었지만, 애좀 먹었다...

Last updated

Was this helpful?