📖 연습문제 > 공원 산책
📖What I thought
크게 3가지 행동을 한다고 분류
- 시작점 찾기
- 이동 방향 확인
- 이동하기
- 가던 중 장애물 or 공원 벗어나 → 왔던만큼 되돌아가
- 가던 길 끝까지 갈 수 있어 → 그 위치 반영해
- 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
- 중복되는 변수들을 잘 정리해서 중복을 제거해주자