우당탕탕 개발일지
[백준] 2178. 미로 탐색 (실버1, Python) 본문
반응형
Java -> Python
파이썬 공부를 시작해볼려고 한다. 그래서 이번에는 파이썬으로 풀어보겠다.
풀이
Java에서 Python으로 변경하면서 좀 어려웠던 부분을 정리해보도록 하겠다.
2차원 배열 선언
miro 변수는 1차원 배열로 선언 후, list 값을 원소로 넣어 2차원 배열을 구현했다.
check 변수는 처음에 [[False] * m] * n으로 선언했더니 원하지 않는 결과가 나왔다. check[0][0] = True 를 수행하면 모든 check[i][0] 값이 True로 변경되었다.
[...] *n 를 하게되면 동일한 객체를 n개 생성하게 되어 모든 [i][0] 값이 변경된다고 한다. 따라서 다른 객체를 선언하고 싶을 때에는 for _ in range(n)를 통해서 생성해야 한다.
Node 클래스 선언
__init__ (self, 매개변수1, 매개변수2, ...) 함수를 통해서 변수 상태를 설정한다.
Node 변수 생성 시, 'Node(x 값, y 값)'을 통해 객체 생성
Queue 변수 선언
상위에 import queue를 통해 큐 라이브러리를 사용하도록 하겠다.
큐 변수, q 생성 하고 Node 객체를 저장한다.
코드
import queue
# Node 클래스 선언
class Node:
x = 0
y = 0
def __init__(self, x, y):
self.x = x
self.y = y
# 미로 탐색
def find():
moveX = [0, -1, 0, 1]
moveY = [1, 0, -1, 0]
q = queue.Queue()
q.put(Node(0,0))
while(q.qsize() > 0):
n = q.get()
for i in range(4):
x = n.x + moveX[i]
y = n.y + moveY[i]
if x < 0 or y < 0 or x > len(miro)-1 or y > len(miro[0])-1:
continue
if int(miro[x][y]) == 0 or check[x][y]:
continue
q.put(Node(x, y))
check[x][y] = True
miro[x][y] = int(miro[n.x][n.y]) + 1
print(miro[len(miro)-1][len(miro[0])-1])
ip = input()
n = int(ip.split(' ')[0])
m = int(ip.split(' ')[1])
miro = []
check = [[False] * m for _ in range(n)]
for i in range(n):
str = input()
miro.append(list(str))
check.append(list())
check[0][0] = True
find()
반응형
'코테 > 백준' 카테고리의 다른 글
[백준] 2468.안전 영역 (실버1, Python) (0) | 2025.04.21 |
---|---|
[백준] 2667.단지 번호 붙이기 (실버1, Python) (0) | 2025.04.18 |
[백준] 2178. 미로 탐색 (실버1, Java) (0) | 2025.03.31 |
[백준] 1260. DFS와 BFS (실버2, Java) (1) | 2025.03.26 |
[백준] 1912.연속합 (실버2, Java) (2) | 2025.03.24 |