일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- 코딩봉사
- programmers
- BFS
- 알고리즘
- 자바
- 회고
- kotlin
- SW봉사
- SQL
- 백준 알고리즘
- 프로그래머스
- 스프링
- C++
- 문제풀이
- softeer
- 코틀린
- MYSQL
- 코딩교육봉사
- python
- 파이썬
- 백준알고리즘
- CJ UNIT
- 공부일지
- 데이터베이스
- 백준
- 소프티어
- 1과목
- 정보처리산업기사
- 시나공
Archives
- Today
- Total
JIE0025
[BFS][lv.2] 게임 맵 최단거리 - 파이썬(Python) 본문
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/1844
코딩테스트 파이썬으로 공부 안한지 또 오래돼서 문법적으로 기억안나는게 생각보다 있다...
리스트의 길이를 구할 때 len()을 써야하는데, size()나 length를 쓰려고 한다던지 ㅠㅠ
문법을 다시 기억하고 익숙하게 만들려면 앞으로도 계속 바로바로 프로그래머스에서 푸는걸 연습해야겠다.
도달하지 못할경우 -1을 출력해야하므로 visited를 -1로 초기화,
처음 위치를 1로 초기화하고 이동할때마다 최단거리를 1씩 증가시켜주면
마지막에 visited[n-1][m-1]을 리턴해주기만 하면 된다
💻 내가 쓴 정답 코드
from collections import deque
def solution(maps):
d = [[1,0],[0,1],[-1,0],[0,-1]]
n, m = len(maps), len(maps[0])
visited = [[-1]*m for _ in range(n)]
queue = deque()
queue.append([0,0])
visited[0][0] = 1
while(queue):
r,c = queue.popleft()
for i in range(4):
dr = r+d[i][0]
dc = c+d[i][1]
if(0<=dr<n and 0<=dc<m and visited[dr][dc] == -1 and maps[dr][dc] == 1):
queue.append([dr,dc])
visited[dr][dc] = visited[r][c] + 1
return visited[n-1][m-1]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[완전탐색][lv.1] 최소직사각형 - 파이썬(Python) (0) | 2023.01.24 |
---|---|
[연습문제][lv.3] 가장 긴 팰린드롬 - 파이썬(Python) (0) | 2023.01.24 |
[카카오][BFS/DP][lv.3] 경주로 건설 - 자바(Java) (0) | 2022.12.11 |
[고득점kit][DFS][lv.3] 네트워크 - 자바(Java) (0) | 2022.12.07 |
[고득점 kit][BFS][lv.2] 게임 맵 최단거리 - 자바(Java) (0) | 2022.12.05 |