일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- RTK Query
- autosize
- recoil
- CORS
- Cypress
- Jest
- useAppDispatch
- 결정 알고리즘
- dfs
- map
- 타입 좁히기
- 무한 스크롤
- 공변성
- Promise
- TS
- 리터럴 타입
- 투포인터
- 이분 검색
- 인터섹션
- webpack
- 태그된 유니온
- app router
- 반공변성
- tailwind
- ESlint
- 호이스팅
- async/await
- CI/CD
- React
- SSR
Archives
- Today
- Total
짧은코딩
괴물 탈출 본문
반응형
from collections import deque
n, m = map(int, input().split())
ary = []
for i in range(n):
ary.append(list(map(int, input())))
#상하좌우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(x, y):
q = deque()
q.append((x, y))
while q:
x, y = q.popleft()
#상하좌우 방문
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
#범위 벗어나면 continue
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
#괴물 만나면 continue
if ary[nx][ny] == 0:
continue
#한번도 방문하지 않은 곳이여야 체크한다.
if ary[nx][ny] == 1:
ary[nx][ny] = ary[x][y] + 1
q.append((nx, ny))
return ary[n-1][m-1]
print(bfs(0,0))
가까운 지점부터 탐색하는 bfs 알고리즘을 사용하면 효율적으로 풀 수 있는 문제이다.
상하좌우를 탐색하도록 한다.
그렇기에 처음 방문하는 곳에 가면 이전 칸도 다시 탐색해서 이전 칸도 카운트가 올라간다.
결국 전부다 탐색을 하게된다. 만약 오른쪽 아래 칸에 도착했을 때 멈추는 조건문을 만든다면 불필요한 연산을 줄일 수 있을 것 같다.
반응형
'코딩 테스트(Python) > 이것이 취업을 위한 코딩 테스트다' 카테고리의 다른 글
정렬(2)-퀵 정렬, 계수 정렬, 라이브러리 (0) | 2022.05.27 |
---|---|
정렬(1)-선택, 삽입 정렬 (0) | 2022.05.27 |
음료수 얼려 먹기 (1) | 2022.05.17 |
탐색 알고리즘 DFS/BFS (0) | 2022.05.12 |
재귀 함수 (0) | 2022.05.12 |
Comments