park
: map 상태
시작 이동할 수 있는 곳 장애물이 있는 곳 'S'
'O'
'X'
routes
: 이동하는 방향('E', 'W', 'S', 'N'), 칸 개수routes에 해당하는 이동을 모두 하고 난 뒤 최종 위치 [y, x]
주석 참고!
def solution(park, routes):
# 위치 index
x = 0
y = 0
# 시작 위치 찾기
for i in range(len(park)):
for j in range(len(park[i])):
if park[i][j] == 'S':
x = j
y = i
break
# 이동
for route in routes:
# 위치 초기화
xx = x
yy = y
# 이동 - 장애물이 있거나 공원을 벗어나면 명령 무시
for step in range(int(route[2])):
# 동쪽 : 현재 위치가 map 가장 오른쪽이면 안됨, 이동할 곳이 장애물이면 안됨
if route[0] == 'E' and xx != len(park[0])-1 and park[yy][xx+1] != 'X':
xx += 1
if step == int(route[2])-1:
x = xx # step만큼 움직였으면 위치 초기화
# 서쪽 : 현재 위치가 map 가장 왼쪽이면 안됨, 이동할 곳이 장애물이면 안됨
elif route[0] == 'W' and xx != 0 and park[yy][xx-1] != 'X':
xx -= 1
if step == int(route[2])-1:
x = xx
# 남쪽 : 현재 위치가 map 가장 아래쪽이면 안됨, 이동할 곳이 장애물이면 안됨
elif route[0] == 'S' and yy != len(park)-1 and park[yy+1][xx] != 'X':
yy += 1
if step == int(route[2])-1:
y = yy
# 북쪽 : 현재 위치가 map 가장 위쪽이면 안됨, 이동할 곳이 장애물이면 안됨
elif route[0] == 'N' and yy != 0 and park[yy-1][xx] != 'X':
yy -= 1
if step == int(route[2])-1:
y = yy
return [y, x]