반응형
Recent Posts
Notice
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스택
- dfs
- 활성화 함수
- easy 딥러닝
- til
- python 2309
- 파이썬
- 백준
- 코딩테스트준비
- boj 2309
- 큐
- softeer
- BFS
- 개발자 취업
- 백준 2309
- 혁펜하임
- 99클럽
- 기능개발
- Python
- BOJ
- 개발자취업
- 항해99
- 알고리즘
- 99항해
- 해시
- 딥러닝
- 구현
- 프로그래머스
- 코딩테스트 준비
- leetcode
Archives
- Today
- Total
동까의 코딩
[Python] 백준 7576 : 토마토 본문
반응형
BFS로 푸는 기본적인 문제 중에 하나인 토마토 문제를 풀어보았습니다.
https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
저의 풀이는 5가지로 나눴습니다.
1. 맵과 n,m을 입력받는다.
2. 토마토가 있는 1의 지점을 받고 queue에 저장한다.
3. bfs에 넣어서 queue에서 pop 해주어 동서남북으로 탐색 후 0을 발견하면 지금 자리에 +1을 하여 맵에 업데이트 후 queue에 해당 좌표를 넣어준다.
4. queue가 비게 될 경우까지 반복을 한다.
5. 맵에서 0이 있으면 -1을 출력하고, 맵에서 가장 큰 숫자를 뽑아주고 -1을 하여 출력하여준다.
from collections import deque
dx = (-1, 0, 1, 0)
dy = (0, 1, 0, -1)
m, n = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(n)]
res = 0
queue = deque()
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
queue.append([i,j])
def bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx, ny = dx[i] + x, dy[i] + y
if 0 <= nx < n and 0 <= ny < m and matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
queue.append([nx, ny])
bfs()
for i in matrix:
for j in i:
if j == 0:
print(-1)
exit(0)
res = max(res, max(i))
print(res - 1)
이상입니다!
반응형
'문제 풀이 > 백준' 카테고리의 다른 글
[Python] 백준 2920 : 음계 (0) | 2024.03.09 |
---|---|
[Python] 백준 2083 : 럭비 클럽 (0) | 2024.03.05 |
[Python] 백준 1264 : 모음의 개수 (0) | 2024.03.05 |
[Python] 백준 2798 : 블랙잭 (2) | 2024.03.04 |
[Python] 백준 9012번: 괄호 (2) | 2024.02.27 |