def solution(park, routes):
answer = []
park_list = [list(park[i]) for i in range(len(park))]
dirc_dict = dict([['N', 0], ['S', 1], ['W', 2], ['E', 3]])
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
W = len(park_list[0])
H = len(park_list)
X = 0
Y = 0
for i in range (H):
for j in range (W):
if park_list[i][j] == "S":
Y = i
X = j
for r in routes:
dirc, dis = r.strip().split(' ')
idx = dirc_dict[dirc]
newX = X + dx[idx] * int(dis)
newY = Y + dy[idx] * int(dis)
if newX >= 0 and newX < W and newY >= 0 and newY < H:
tf = 0
stepx = 1
if X > newX:
stepx = -1
for i in range (X, newX+stepx, stepx):
if (park_list[newY][i] == "X"):
tf = 1
break
stepy = 1
if Y > newY:
stepy = -1
for j in range(Y, newY+stepy, stepy):
if (park_list[j][newX] == "X"):
tf = 1
break
if tf == 0:
X = newX
Y = newY
return Y, X
유형 : 구현
오우. 어렵다.
일단 구현 자체는 복잡하지 않은데 index가 헷갈리는 게 많았다.
X, Y축이 뒤죽박죽 되었는데, 처음부터 두 개를 바꾸고 풀었어야 더 쉽게 풀렸을 것 같다.
그리고 복잡한 게 싫어서 CASE를 전부 나누지 않았는데, 그냥 방향별로 CASE 나눠서 푸는게 더 쉬웠을까 싶다.
for문에서 양수인 경우만 고려를 하고 음수인 경우를 고려하지 않아서 한참을 헤맸다.
이런 미로 문제에서 방향 경로에 있는 것 전부를 체크해야 하는 경우 꼭 음수를 고려하자.
이 부분이다.
if newX >= 0 and newX < W and newY >= 0 and newY < H:
tf = 0
stepx = 1
if X > newX:
stepx = -1
for i in range (X, newX+stepx, stepx):
if (park_list[newY][i] == "X"):
tf = 1
break
stepy = 1
if Y > newY:
stepy = -1
for j in range(Y, newY+stepy, stepy):
if (park_list[j][newX] == "X"):
tf = 1
break
'프로그래머스 > Lv. 1' 카테고리의 다른 글
15. 하노이 탑 ★ (0) | 2024.07.12 |
---|---|
14. 바탕화면 정리 (0) | 2024.07.12 |
12. 추억 점수 (0) | 2024.07.12 |
11. 달리기 경주 ★ (dictionary 자료형 사용해 index 찾기) (0) | 2024.07.12 |
10. 데이터 분석 ★ (이차원 배열의 정렬 key) (0) | 2024.07.11 |