문제 자체는 쉬운데, 여기서 조심해야할 것이 얕은 복사, 깊은 복사이다.
list는 mutable 객체이기 때문에, 만약 = 연산자로 복사를 하면 가리키고 있는 주소값 자체를 복사해버린다.
이걸 얕은 복사라고 하는데, 얕은 복사를 했을 때 둘 중 특정 객체를 수정하면 나머지 하나의 객체도 같은 주소를 바라보기 때문에 같이 변하게 된다.
1차원 배열에서 복사를 할 때 이러한 얕은 복사를 피하기 위해서는 간단하게 슬라이싱을 이용해서 깊은 복사를 할 수 있다.
깊은 복사는 가리키고 있는 객체도 깊게 복사해서 서로 다른 주소의 객체를 가리키게 되는 것이다.
def solution(park, routes):
answer = []
direction = {"E" : [0, 1], "S" : [1, 0], "W" : [0, -1], "N" : [-1, 0]}
for i in range(len(park)):
for j in range(len(park[0])):
if park[i][j] == "S":
current = [i, j]
past = current[:]
for route in routes:
direct, num = route.split(" ")
num = int(num)
for _ in range(num):
past[0] += direction[direct][0]
past[1] += direction[direct][1]
if 0 <= past[0] < len(park) and 0 <= past[1] < len(park[0]):
if park[past[0]][past[1]] == "X":
past = current[:]
break
else:
continue
else:
past = current[:]
break
else:
current = past[:]
return [current[0], current[1]]