https://school.programmers.co.kr/learn/courses/30/lessons/150365
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
# (x, y)에서 (r, c)로 이동해 탈출해야 함
# 미로 탈출 조건
# 격자 밖으로 못나감
# 이동거리 총 k
# 같은 격자 두 번 이상 방문 가능
# 문자열이 사전 순으로 가장 빠른 경로로 탈출
# dfs (최단거리 아니라 k거리)
def solution(n, m, x, y, r, c, k):
answer = []
# r, l, d, u 동서남북
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
shortest = abs(r-x)+abs(c-y)
if (k < shortest) or ((k-shortest)%2 == 1):
return "impossible"
def dfs(xx, yy, num, journey):
if num == k:
if (k-shortest)%2 == 1:
answer.append("impossible")
return
if xx == r and yy == c: #k거리만에 목적지 도착
answer.append(journey)
return
else:
return
for i in range(4):
nx, ny = xx+dx[i], yy+dy[i]
if 0 < nx <= n and 0 < ny <= m:
if i == 0:
dfs(nx, ny, num+1, journey+'r')
elif i == 1:
dfs(nx, ny, num+1, journey+'l')
elif i == 2:
dfs(nx, ny, num+1, journey+'d')
else:
dfs(nx, ny, num+1, journey+'u')
dfs(x, y, 0, '')
if len(answer) == 0:
return "impossible"
if answer[-1] == "impossible":
return "impossible"
answer.sort()
return answer[0]
틀렸는데, 정확히 어디가 틀린지 아직 못 찾았다.
우선 이 문제의 핵심은 "탈출할 수 없는 경우"를 처리해주는 것이었다.
1. k가 최단거리(dist)보다 작을 때
2. 도착했는데, (걸린 거리 - k)%2가 1일 때
참고할 풀이들
[프로그래머스 Lv3] 파이썬 - 미로 탈출 명령어
프로그래머스 - 미로 탈출 명령어 # 조건 n x m 격자 미로가 주어집니다. 당신은 미로의 (x, y)에서 출발해 (r, c)로 이동해서 탈출해야 합니다. 단, 미로를 탈출하는 조건이 세 가지 있습니다. 격자의
cheon2308.tistory.com
2023 KAKAO BLIND RECRUITMENT - 미로 탈출 명령어 (파이썬) 문제 및 풀이
2023 KAKAO BLIND RECRUITMENT - 미로 탈출 명령어 (파이썬) 문제 및 풀이
velog.io
'알고리즘 > 프로그래머스_Python' 카테고리의 다른 글
[Progrmmers] 후보키 (0) | 2023.11.06 |
---|---|
[Programmers] 이중우선순위큐 (0) | 2023.10.25 |
[Programmers] (0) | 2023.10.18 |
[Programmers] 주차 요금 계산 (1) | 2023.10.16 |
[Programmers] 메뉴 리뉴얼 (1) | 2023.10.16 |