<문제출처>
https://school.programmers.co.kr/learn/courses/30/lessons/172928#
<고민 끄적끄적>
그래프 위에서 정해진 방향과 거리만큼 로봇을 움직이는 문제이다.
그래프 크기와 명령의 개수가 많지 않은 단순한 시뮬레이션 문제이다.
dict(), dxs, dys 변수를 활용해서 동, 서, 남, 북으로의 다음 방향을 그래프 탐색한다.
1. 그래프 범위에서 나가는지
2. 중간에 X가 있어서 갈 수 없는지
에 대해서 조건문 처리만 해주면 쉽게 해결할 수 있다.
최종코드
def is_range(x, y, n, m):
return 0 <= x < n and 0 <= y < m
def can_go(x, y, nx, ny, park):
if x > nx:
x, nx = nx, x
if y > ny:
y, ny = ny, y
for i in range(x, nx + 1):
for j in range(y, ny + 1):
if park[i][j] == "X":
return False
return True
# 시뮬레이션 -> 그대로 구현
def solution(park, routes):
dire = {"N": 0, "E": 1, "S": 2, "W": 3}
dxs, dys = [-1, 0, 1, 0], [0, 1, 0, -1]
# 행, 열
n, m = len(park), len(park[0])
# 시작지점 찾기
for i in range(n):
for j in range(m):
if park[i][j] == "S":
x, y = i, j
# 명령 수행하기
for route in routes:
d, dist = route.split(" ")
dist = int(dist)
# 다음으로 이동해야할 좌표
dx, dy = dxs[dire[d]], dys[dire[d]]
nx, ny = x + dx*dist, y + dy*dist
# 1. 공원을 벗어나는지 확인하기
if not is_range(nx, ny, n, m):
continue
# 2. 장애물을 만나는지 확인
if not can_go(x, y, nx, ny, park):
continue
x, y = nx, ny
return [x, y]
그래프탐색은 그래프의 범위, 갈수있는지 등에 대한 조건문 처리만 꼼꼼하게 해주도록 주의하자!
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 연습문제(LV2) : 리코쳇 로봇 (0) | 2023.11.05 |
---|---|
[프로그래머스] 연습문제(LV1) : 추억 점수 (0) | 2023.10.28 |
[프로그래머스] 연습문제(LV2) : 연속된 부분 수열의 합 (0) | 2023.10.28 |
[프로그래머스] 연습문제(LV1) : 달리기 경주 (0) | 2023.10.28 |
[프로그래머스] 연습문제(LV2) : 두 원 사이의 정수 쌍 (0) | 2023.10.28 |