표 편집
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?