미로 탈출 명령어 (DFS, 백트래킹)

2023. 4. 5. 16:38·Coding Test/programmers
728x90

문자열이 사전 순으로 가장 빠른 경로로 탈출

시간제한으로 방문하지 않아도 되는 경로는 탐색하지 않도록 조건 제한

"""
격자의 크기를 뜻하는 정수 n, m,
출발 위치를 뜻하는 정수 x, y,
탈출 지점을 뜻하는 정수 r, c,
탈출까지 이동해야 하는 거리를 뜻하는 정수 k

미로를 탈출하기 위한 경로를 return
미로를 탈출할 수 없는 경우 "impossible"
"""
import sys
sys.setrecursionlimit(10**8)

dAlpha = ['d', 'l', 'r', 'u']
dx = [1, 0, 0, -1]
dy = [0, -1, 1, 0]

answer = "z"

def dfs(n, m, x, y, r, c, prev_s, cnt, k):
    global answer
    if k-cnt < abs(x-r)+abs(y-c):  # 탈출이동거리 넘는경우
        return
    if x==r and y==c and cnt==k:  # 도착
        answer = prev_s
        return
    for i in range(4):
        nextX=x+dx[i]
        nextY=y+dy[i]
        if 1<=nextX<=n and 1<=nextY<=m and prev_s < answer:  # 격자판, 문자열이 사전순 큰경우
            dfs(n, m, nextX, nextY, r, c, prev_s+dAlpha[i], cnt+1, k)


def solution(n, m, x, y, r, c, k):
    dist = abs(x-r) + abs(y-c)  # 탈출 최단 거리
    if dist>k or (k-dist)%2==1:  # 탈출 도착 후, 2n 이동하면 제자리
        return "impossible"
    dfs(n, m, x, y, r, c, "", 0, k)
    return answer

print(solution(3,4,2,3,3,1,5)) # "dllrl"
print(solution(2,2,1,1,2,2,2)) # "dr"
print(solution(3,3,1,2,3,3,4)) # "impossible"

 

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/programmers' 카테고리의 다른 글
  • 개인정보 수집 유효기간 (문자열, 구현)
  • 택배 배달과 수거하기 (그리디)
  • 이모티콘 할인행사 (완전 탐색, 조합)
  • 표현가능한 이진 트리 (이진수 변환, 포화이진트리, 중위순회, 이분탐색)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    LIS
    월간코드챌린지
    그래프
    큐
    트리
    프로그래머스
    그리디
    정렬
    구간합
    파이썬
    힙
    이분탐색
    DFS
    조합
    스택
    최소신장트리
    덱
    최대공약수
    자료구조
    DP
    Algorithm
    재귀
    알고리즘
    BFS
    다익스트라
    구현
    최단거리
    플로이드워셜
    동적계획법
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
미로 탈출 명령어 (DFS, 백트래킹)
상단으로

티스토리툴바