🔫 문제 : 공원 산책
https://school.programmers.co.kr/learn/courses/30/lessons/172928
📍 정리
산책 경로가 주어졌을 때, 공원의 범위와 장애물을 고려해 강아지의 최종 위치를 구하면 된다!
- 공원의 범위를 벗어나거나 장애물을 마주치면 해당 명령을 수행하기 전 위치로 돌아가 다음 명령을 수행하면 된다.
🌱 풀이과정
1️⃣ 산책을 시작할 위치 찾기
아래와 같이 문자열 "S"가 있는 x좌표와 y좌표의 위치를 answer에 넣어주었다.
for x in range(H):
for y in range(W)):
if "S" in park[x][y]:
answer.append(x)
answer.append(y)
2️⃣ 강아지 산책시키기
먼저, 동서남북의 이동을 다음과 같이 딕셔너리로 표현해두었다.
direction = {'N':[-1, 0], 'S':[1, 0], 'W':[0, -1], 'E':[0, 1] }
그리고 아래 for문에서 공원의 범위와 이동하는 동안 장애물을 만나는 지 고려해 위치를 업데이트 하도록 하였다.
여기서 주의해야할 점은 도착지로 가는 도중에 장애물이 있다면 도착지로 갈 수 없다는 것이다!
나는 처음에 이동하는 과정을 고려하지 않고 도착지에만 장애물이 없으면 이동이 가능하도록 구현을 해놔서 틀렸었다😅
공원의 범위와 위치를 한번에 if문으로 처리하였다.
이동을 할 수 없다면 해당 명령을 수행하기 전 위치로 되돌아가고 반복문을 탈출하게 하였고,
이동을 할 수 있다면 이동거리까지 한칸씩 이동하도록 코드를 작성하였다.
for route in routes:
# op: 방향, n: 이동 거리
op, n = route.split()
n = int(n)
# 원래 위치
real_x, real_y = answer[0], answer[1];
for i in range(n):
# 업데이트된 현재 위치
x, y = answer[0], answer[1]
# 한칸 이동한 위치
dx, dy = answer[0] + direction[op][0], answer[1] + direction[op][1]
if dx < 0 or dy < 0 or dx >= H or dy >= W or "X" in park[dx][dy]:
answer = [real_x, real_y]
break
else:
answer = [dx, dy]
👩🏻💻 전체코드
def solution(park, routes):
answer = []
# W: 가로, H: 세로
W = len(park[0])
H = len(park)
# 시작 좌표 찾기
for x in range(H):
for y in range(W)):
if "S" in park[x][y]:
answer.append(x)
answer.append(y)
direction = {'N':[-1, 0], 'S':[1, 0], 'W':[0, -1], 'E':[0, 1] }
for route in routes:
# op: 방향, n: 이동 거리
op, n = route.split()
n = int(n)
# 원래 위치
real_x, real_y = answer[0], answer[1];
for i in range(n):
# 업데이트된 현재 위치
x, y = answer[0], answer[1]
# 한칸 이동한 위치
dx, dy = answer[0] + direction[op][0], answer[1] + direction[op][1]
if dx < 0 or dy < 0 or dx >= H or dy >= W or "X" in park[dx][dy]:
answer = [real_x, real_y]
break
else:
answer = [dx, dy]
return answer
😃 결과
'알고리즘' 카테고리의 다른 글
[프로그래머스 / Python] 이모티콘 할인행사 (0) | 2023.04.06 |
---|---|
[프로그래머스 / Python] 주식가격 (0) | 2023.04.01 |
[프로그래머스 / Python] 단어 변환 (0) | 2023.03.23 |
[프로그래머스 / Python] 베스트앨범 (0) | 2023.03.20 |
[프로그래머스 / C++ / Python] 타겟 넘버 (1) | 2023.03.13 |