[PS] 표 편집

owo·2023년 3월 26일
0

PS

목록 보기
25/25

문제링크

코드

def solution(n, k, cmd):
    answer = {x: ["O", x - 1, x + 1] for x in range(-1, n + 1)}
    deleted = []

    for c in cmd:
        if c[0] == 'U':
            i = int(c.split()[1])
            for _ in range(i):
                k = answer[k][1]
        elif c[0] == "D":
            i = int(c.split()[1])
            for _ in range(i):
                k = answer[k][2]
        elif c[0] == "C":
            answer[k][0] = "X"
            bef, nxt = answer[k][1], answer[k][2]
            answer[bef][2] = nxt
            answer[nxt][1] = bef
            deleted.append(k)
            k = bef if answer[k][2] == n else nxt
        else:
            removed = deleted.pop()
            answer[removed][0] = "O"
            bef, nxt = answer[removed][1], answer[removed][2]
            answer[removed][1] = bef
            answer[removed][2] = nxt
            answer[bef][2] = removed
            answer[nxt][1] = removed

    return ''.join(map(lambda x: answer[x][0], range(n)))

리뷰

  • 처음에 연결 리스트를 고려하지 않았던 이유는 연결 리스트로 만들더라도 처음에서 끝으로 계속 커서를 이동시키면 시간복잡도를 만족시키지 못한다고 생각했기 때문이었다.
  • 하지만 조건에 "cmd에 등장하는 모든 X들의 값을 합친 결과가 1,000,000 이하인 경우만 입력으로 주어집니다."라는 조건이 있기 때문에 연결 리스트를 이용하는 방법은 시간복잡도를 충족한다.
  • 문자열을 숫자로 바꾸는 과정에서 2자리 이상의 숫자를 고려하지 않고 i = int(c[2])를 써서 나중에 런타임 에러(Out of range)가 발생했다. 문자열을 숫자로 바꾸는 것을 조심해야겠다.

0개의 댓글