코테 준비
[프로그래머스] 공원 산책
박수련
2024. 2. 29. 23:18
문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/172928
시작점 S, 지나갈 수 있는 길 O, 장애물 X로 구성된 이차원 그래프 park가 주어진다.
routes에는 방향과 이동거리가 주어진다.
시작점으로부터 이동을 하는데 이때 routes에서 주어진 경로에 장애물이 있다면 무시하고 다음 경로를 수행한다.
모든 경로를 수행했을 때 최종 위치를 반환한다.
접근
가장 먼저 시작점의 좌표를 찾아주었다.
그리고 check함수를 통해 가야하는 경로에 장애물이 있는지, 공원 밖을 넘어가는지 확인해주었다.
check함수는 갈 수 없는 경로라면 False를 반환하고, 갈 수 있는 경로라면 True를 반환한다.
반환값이 True값이라면 routes에 제시된 방향으로 n만큼 이동시켰다.
코드
def solution(park, routes):
h, w = len(park), len(park[0])
def check(x, y, op, n):
if op == "N":
for i in range(1, n + 1):
if x - i < 0 or park[x-i][y] == "X":
return False
elif op == "S":
for i in range(1, n + 1):
if x + i >= h or park[x+i][y] == "X":
return False
elif op == "W":
for i in range(1, n + 1):
if y - i < 0 or park[x][y-i] == "X":
return False
elif op == "E":
for i in range(1, n + 1):
if y + i >= w or park[x][y+i] == "X":
return False
return True
# 시작점 찾기
x, y = -1, -1
for i in range(h):
for j in range(w):
if park[i][j] == "S":
x, y = i, j
break
if x != -1 and y != -1:
break
# 경로 따라가기
for r in routes:
op, n = map(str, r.split())
n = int(n)
if check(x, y, op, n):
if op == "N":
x -= n
elif op == "S":
x += n
elif op == "W":
y -= n
else:
y += n
return [x, y]