스택을 써야겠다고 느꼈고, 그래서 list를 썼다.
N = int(input())
D = input()
S = list(map(int, input().split()))
stack = [(0,0,1)]
set = {(0,0)}
coor = (0,0)
for i in range(N):
d = D[i]
s = S[i]
if d == 'R':
coor = (coor[0]+1, coor[1])
elif d == 'U':
coor = (coor[0], coor[1]+1)
elif d == 'L':
coor = (coor[0]-1, coor[1])
elif d == 'D':
coor = (coor[0], coor[1]-1)
# pop until not in set
while coor in set:
set.remove((stack[-1][0], stack[-1][1]))
del stack[-1]
stack.append((coor[0], coor[1], s))
set.add(coor)
print(sum(x[2] for x in stack))
우선 기계적으로 input().split()을 쓰면 안된다. D는 공백으로 나눠진게 아니라 붙어 있기 때문.
set .remove와 list .remove는 값으로 삭제한다는 점에서 일관성이 있다.