728x90
반응형
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이:
def solution(park, routes):
answer = []
start = []
for i in range(len(park)):
if 'S' in park[i]:
start = [i, park[i].find('S')]
break
print(start)
for route in routes:
dir, move = route.split(' ')
move = int(move)
if dir == 'E':
loc = start[1] + move
if loc >= len(park[0]):
continue
if 'X' in park[start[0]][start[1]+1:loc+1]:
continue
else:
start[1] = loc
elif dir == 'W':
loc = start[1] - move
if loc < 0:
continue
if 'X' in park[start[0]][loc:start[1]]:
continue
else:
start[1] = loc
elif dir == 'S':
loc = start[0] + move
if loc >= len(park):
continue
if 'X' in [park[i][start[1]] for i in range(start[0]+1,loc+1)]:
continue
else:
start[0] = loc
elif dir == 'N':
loc = start[0] - move
if loc < 0:
continue
if 'X' in [park[i][start[1]] for i in range(loc,start[0])]:
continue
else:
start[0] = loc
return start
25.03.08 재풀이
def solution(park, routes):
graph = [list(i) for i in park]
start = [0, 0]
for x in range(len(graph)):
for y in range(len(graph[0])):
if graph[x][y] == "S":
start = [x, y]
move = {"W": (0, -1),
"E": (0, 1),
"N": (-1, 0),
"S": (1, 0)}
for route in routes:
moving, step = route.split(" ")
temp_x = start[0]
temp_y = start[1]
for _ in range(int(step)):
dx, dy = move[moving]
start[0] += dx
start[1] += dy
if 0 <= start[0] < len(graph) and 0 <= start[1] < len(graph[0]) and graph[start[0]][start[1]] != "X":
continue
else:
start[0] = temp_x
start[1] = temp_y
break
return start
bfs 로 접근하였다
routes를 돌면서
하나의 명령어를 시작하기전에
temp_x 와 temp_y에 위치를 저장하고 실패하면 다시 돌린다. 성공하면 시작위치는 이동이 되어있다.
반응형
댓글