일상 코딩
[python/파이썬] 코딩테스트에서 많이 나오는 X,S,G,* 이용한 미로 만들기 maze.py 본문
Python/고전 컴퓨터 알고리즘
[python/파이썬] 코딩테스트에서 많이 나오는 X,S,G,* 이용한 미로 만들기 maze.py
polarcompass 2022. 4. 19. 18:03728x90
from enum import Enum
from typing import List, NamedTuple, Callable, Optional
import random
from math import sqrt
from urllib.parse import MAX_CACHE_SIZE
# from generic_search import dfs, bfs, node_to_path, astar, Node
class Cell(str, Enum):
EMPTY = " "
BLOCKED = "X"
START = "S"
GOAL = "G"
PATH = "*"
class MazeLocation(NamedTuple):
row: int
column: int
class Maze:
def __init__(self, rows: int = 10
,columns: int = 10
,sparseness: float = 0.2
,start: MazeLocation = MazeLocation(0,0)
,goal: MazeLocation = MazeLocation(9,9)):
# 기본 인스턴스 변수 초기화
self._rows: int = rows
self._columns: int = columns
self.start: MazeLocation = start
self.goal: MazeLocation = goal
# 격자를 빈 공간으로 채운다.
self._grid: List[List[Cell]] = [[Cell.EMPTY for c in range(columns)] for r in range(rows)]
# 격자에 막힌 공간을 무작위로 채운다.
self._randomly_fill(rows, columns, sparseness)
# 시작 위치와 목표 위치를 설정한다.
self._grid[start.row][start.column] = Cell.START
self._grid[goal.row][goal.column] = Cell.GOAL
def _randomly_fill(self, rows: int, columns: int, sparseness: float):
for row in range(rows):
for column in range(columns):
if random.uniform(0, 1.0) < sparseness: # 무작위수가 0.2보다 작으면 X로 막는다.
self._grid[row][column] = Cell.BLOCKED
# 미로 출력
def __str__(self):
output = ""
for row in self._grid:
output += "".join([c.value for c in row]) + "\n"
return output
maze = Maze()
print(maze)
결과값:
기본적으로 무작위로 생성됨.
SX X
X XXXX
XX X X
X X X
X
X
XX X XX
X XX
X X G
728x90
'Python > 고전 컴퓨터 알고리즘' 카테고리의 다른 글
[python/파이썬] 미로찾기: DFS 깊이 우선 탐색 알고리즘 방법 적용 (0) | 2022.04.19 |
---|---|
파이썬 압축 알고리즘 DNA 시퀀스를 이용한 압축 알고리즘 (0) | 2021.01.30 |
파이썬 깨지지않는 암호화 OTP(One-Time-Pad) XOR 이용한 암호화 및 복호화 (0) | 2021.01.30 |
파이썬을 통한 라이프니츠 공식으로 파이 계산하기 (0) | 2021.01.24 |
피보나치 수열 알고리즘 in 파이썬 python 고전 컴퓨터 알고리즘 (0) | 2021.01.22 |