📖 연습문제 > 공원 산책

📖What I thought

크게 3가지 행동을 한다고 분류

  1. 시작점 찾기
  2. 이동 방향 확인
  3. 이동하기
    • 가던 중 장애물 or 공원 벗어나 → 왔던만큼 되돌아가
    • 가던 길 끝까지 갈 수 있어 → 그 위치 반영해
  4. 2, 3번을 명령 개수만큼 수행해서 최종 도착 위치 찾기!
  • 가던 중 한 번만 장애물 발견 or 공원 벗어나도 그 경로는 수행이 불가능한 명령이므로 해당 명령 수행 중지

📖풀이

📎구현

def solution(park, routes):
    def move(routes, park, x, y):
        op = {'E': (0, 1), 'W': (0,-1), 'S': (1, 0), 'N': (-1, 0)} # 동서남북
        weight, height = len(park), len(park[0]) # 공원 가로/세로 크기
        
        # 경로대로 이동
        for route in routes:
            # 이동할 방향, 이동할 칸 수
            direction, steps = route.split()
            move_x, move_y = op[direction]
            
            # 이동할 칸 수만큼
            for step in range(int(steps)):
                x += move_x
                y += move_y
                
                # 공원 벗어남 or 장애물 만남 (이동했던 칸 수만큼 돌아가 == 명령 수행 X)
                if x>=weight or y>=height or x<0 or y<0 or park[x][y] == 'X':
                    x -= move_x*(step+1)
                    y -= move_y*(step+1)
                    break
        
        # 모든 명령 수행 후 위치
        return [x, y]
        
    weight, height = len(park), len(park[0])
    
    for x in range(weight):
        for y in range(height):
            if(park[x][y]) == 'S':
                return move(routes, park, x, y)

📖What I learned

  1. 중복되는 변수들을 잘 정리해서 중복을 제거해주자

📖관련 지식