메뉴 건너뛰기

Python 고급 - 미로찾기

Eugene 2025.09.15 16:41 조회 수 : 8

def mazesolve(maze): #미로 탈출의 헥심 함수

 

 

    height = len(maze) #미로의 높아 길이

    width = len(maze[0]) #미로의 너비 길이

 

    start = (1, 0) #미로 찾기 시작점

    end = (6, 5) #미로 찾기 끝점

 

    stack = [start] #미로 찾는 중 막다른 길을 탈출하기 위한 스택

 

    print("--------")

    maze[start[0]][start[1]] = "*" #미로 탈출의 말

    mazeprint(maze) #현재 미로 상태를 출력

    print(stack) #미로 탈출할 때의 스택 현황을 출력

 

 

 

 

    while stack: #스택이 비어 있지 않다면 계속해서 반복해서 출력하는 반복문

 

        current_y, current_x = stack[-1] #현재 위치는 스택의 최신 데이터

 

 

        if (current_y, current_x) == end: #현재 위치가 끝점 위치라면

            print("미로에서 탈출했습니다!") #미로를 탈출한다

            return

 

 

        moves = [(-1, 0), (0, 1), (1, 0), (0, -1)] #이동 범위 설정

 

        check = 0 #구분을 위한 설정값

 

        for move_y, move_x in moves: #이동을 위한 for문

 

            next_x = current_x + move_x #미리 설정된 이동 범위에 따라 현재 x, y 위치를 이동시킨다

            next_y = current_y + move_y

 

 

            #이동할 예정인 위치 좌표값이 모두 양수이고, 너비, 높이 값보다 작고, 다음 위치의 값이 0이라면

            if next_x >=0 and next_x < width and next_y >=0 and next_y < height and maze[next_y][next_x] == 0:

 

 

                stack.append((next_y, next_x)) #스택에 다음 위치 좌표를 넣기

                maze[next_y][next_x] = "*" #다음 위치의 값을 * 로 저장

                check = 1 #설정값을 1로 바꿔 X가 표시되는 것을 방지

                break

 

 

        if check == 0: #만약 다음 위치의 값이 모두 0이 아니라면(막혀있다면)

            maze[current_y][current_x] = "X" #해당 위치의 값 X로 바꾸고

            stack.pop() #스택에 저장된 해당 위치의 좌표값을 날린다

 

        print("--------")

        mazeprint(maze)

        print(stack)

 

 

def mazeprint(maze): #미로 출력 함수

    for y in maze:

        for x in y:

            print(x, end=' ')

        print()

 

 

 

# 미로 맵

maze = [

    [1, 1, 1, 1, 1, 1, 1],

    [0, 0, 0, 0, 0, 0, 1],

    [1, 0, 1, 1, 1, 0, 1],

    [1, 0, 1, 0, 1, 0, 1],

    [1, 0, 1, 0, 1, 1, 1],

    [1, 0, 0, 0, 0, 0, 1],

    [1, 1, 1, 1, 1, 0, 1]

]

 

print("--- 미로 ---")

 

mazeprint(maze)

mazesolve(maze)

 

인하대 남현우 학생이 Horowitz의 Data Structures in C++ 책을 참고하여 만든 미로찾기 프로그램.

번호 제목 글쓴이 날짜 조회 수
» Python 고급 - 미로찾기 Eugene 2025.09.15 8
21 Python 일반 - n까지의 수 중에서 소수(Prime Number) 구하기 Eugene 2022.09.02 347
20 Python 일반 - 문자열 압축 Eugene 2022.04.19 249
19 Python 일반 - 1등에서 3등까지 사탕 나눠주기 Eugene 2022.03.14 219
18 Python 일반 - 올바른 괄호문자열인가? Eugene 2022.01.26 197
17 Python 일반 - 깊이 우선 탐색 Eugene 2021.03.04 291
16 Python 일반 - Bubble Sort(버블 정렬) Eugene 2020.02.29 318235
15 Python 일반 - 10진수를 2진수로 변환 [1] Eugene 2020.02.19 1916
14 Python 일반 - 스택/큐를 사용하지 않은 회문 알고리즘 Eugene 2019.10.09 517
13 Python 최대 증가 부분 수열 구하기. mangdee 2019.07.06 503
12 python 팬미팅 알고리즘 mangdee 2019.06.21 485
11 Python 동적 변수 생성 mangdee 2019.06.05 14273
10 Python 순열과 조합 mangdee 2019.06.04 1418
9 Python 일반 - 2중 루프를 이용한 문자로 여러가지 삼각형 그리기 [1] Eugene 2019.04.11 2439
8 Python 일반 - 2중 루프를 이용한 문자로 삼각형 찍기 Eugene 2019.02.19 657
7 Python 기초: 논리적 물리적 행(line) Eugene 2018.10.24 4899
6 Python 기초: 재귀함수를 이용한 최대값 구하기. [1] Eugene 2018.09.08 6524
5 Python 기초 - 변수와 문자 상수의 사용 Eugene 2018.06.12 696
4 Python 기초 - 이스케이프(escape) 문자와 변수 외... Eugene 2018.01.24 1768
3 Python 기초 - 주석과 자료형 2: format() Method Eugene 2017.10.27 508