문제 링크
내 풀이
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)
댓글남기기