우당탕탕 개발일지

[백준] 2178. 미로 탐색 (실버1, Python) 본문

코테/백준

[백준] 2178. 미로 탐색 (실버1, Python)

ujin302 2025. 3. 31. 17:32
반응형

Java -> Python

파이썬 공부를 시작해볼려고 한다. 그래서 이번에는 파이썬으로 풀어보겠다.

Java 풀이

 

풀이

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()
반응형