728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2차원 배열을 만들고, 돌면서 갈 수 없는 길은 가지 않고, 최종 경로를 구하는 문제
def solution(park, routes):
len_x = len(park) # 세로 길이
len_y = len(park[0]) # 가로 길이
# E, W, S, N
direct = {"E": [0, 1], "W": [0, -1], "S": [1, 0], "N": [-1, 0]}
# 출발지 지정
for i in range(len_x):
for j in range(len_y):
if park[i][j] == "S":
x = i
y = j
break
for r in routes:
op, dist = r.split()
op = direct[op]
dist = int(dist)
dx, dy = op[0], op[1] # 방향
nx = x + dx * dist
ny = y + dy * dist
if nx < 0 or nx >= len_x or ny < 0 or ny >= len_y: # 공원에서 벗어난 경우
continue
if nx >= x: # 양의 방향으로 이동한 경우
if 'X' in [park[i][y] for i in range(x, nx+1)]:
continue
else: # 음의 방향으로 이동한 경우
if 'X' in [park[i][y] for i in range(nx, x+1)]:
continue
if ny >= y: # 양의 방향으로 이동한 경우
if 'X' in park[x][y:ny+1]:
continue
else: # 음의 방향으로 이동한 경우
if 'X' in park[x][ny:y+1]:
continue
# 위 경우들에 걸리지 않는 경우에만 이동한다.
x = nx
y = ny
return [x, y]
분명히 쉬운, 아니 완전 쉬운 문제인데 계속 테스트 케이스 20개 중에 5개가 틀렸다고 나와서 이 오류 잡는데 시간이 오래 걸렸다.
동, 서, 남, 북 모두 하나의 로직으로 진행하려고 하다보니 그랬다.
만약 서쪽, 북쪽으로 갈 경우, 현재 인덱스보다 이동하고 싶은 인덱스가 더 작은데, 그 부분을 고려하지 못했다.
728x90