[프로그래머스] 공원 산책

최동혁·2023년 5월 9일
0

1일 1코테 이상

목록 보기
7/10

풀이

문제 자체는 쉬운데, 여기서 조심해야할 것이 얕은 복사, 깊은 복사이다.
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]]
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글