반응형
Notice
Recent Posts
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
- 그래픽스
- 컴퓨터 비전
- Regularization
- SGD
- logistic regression
- C++
- 인공지능
- 딥러닝
- 파이썬
- CPP
- OpenGL
- Computer Vision
- 신경망
- 비용함수
- 컴퓨터 그래픽스
- CNN
- pre-trained
- 추천 시스템
- Kaggle
- cs231n
- petal to metal
- SVM
- Vision
- recommender system
- neural network
- 로지스틱 회귀
- 머신러닝
- Support Vector Machine
- Unsupervised learning
- 백준
Archives
- Today
- Total
kwan's note
백준 7576번 토마토 파이썬 (python code) 본문
반응형
난이도: 실버1
번호: 7576번
처음에는 매번 모든 행과열의 데이터를 확인해서 1이면 확장하는 방식으로 만들었는데
시간초과가 발생했다.
초기작성코드(시간초과)
from sys import stdin
from copy import deepcopy
def tomato():
day = 0
prev= [0]
while( any(0 in tomatobox[i] for i in range(M)) and prev != tomatobox):
prev = deepcopy(tomatobox)
q=[]
for m in range(M):
for n in range(N):
if tomatobox[m][n]== 1:
if m < M - 1 and tomatobox[m + 1][n] == 0:
q.append([m+1,n])
if m > 0 and tomatobox[m - 1][n] == 0:
q.append([m-1,n])
if n < N - 1 and tomatobox[m][n + 1] == 0:
q.append([m,n+1])
if n > 0 and tomatobox[m][n - 1] == 0:
q.append([m,n-1])
while q:
tomatobox[q[-1][0]][q[-1][1]]=1
q.pop()
day+=1
if ( prev != tomatobox):
print(day)
else:
print(-1)
if __name__ == '__main__':
N,M = map(int,stdin.readline().split())
tomatobox=[]
for i in range(M):
tomatobox.append(list(map(int,stdin.readline().split())))
tomato()
다른분들의 코드를 참고하였는데 초기에 1이들어있는 인덱스와 내가 확장시킨 인덱스만 확인하면 되는거였다.
지금보면 당연한데 생각을 못했다.
day를 계산하는 방법을 새로 만들었다.
확실히 더 bfs 스러워졌고 파이썬스러워진듯하다.
from sys import stdin
from collections import deque
def tomato():
q= deque()
day=-1
for i in range(M):
for j in range(N):
if tomatobox[i][j] == 1:
q.append([i, j])
while q:
for _ in range(len(q)):
a, b = q.popleft()
for i in range(4):
x = a + dx[i]
y = b + dy[i]
if 0 <= x < M and 0 <= y < N and tomatobox[x][y] == 0:
tomatobox[x][y] = 1
q.append([x, y])
day+=1
if any(0 in tomatobox[i] for i in range(M)):
print(-1)
else:
print(day)
if __name__ == '__main__':
N,M = map(int,stdin.readline().split())
tomatobox=[]
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(M):
tomatobox.append(list(map(int,stdin.readline().split())))
tomato()
반응형
'Algorithm > python' 카테고리의 다른 글
백준 1003번 피보나치 파이썬 (python code) (0) | 2021.01.14 |
---|---|
백준 11047번 동전0 파이썬 (python code) (0) | 2021.01.14 |
백준 1260번 DFS와 BFS 파이썬 (python code) (2) | 2021.01.13 |
백준 9633번 NQueen 파이썬 (python code) (0) | 2021.01.12 |
백준 15649번 N과 M (3) 파이썬 (python code) (0) | 2021.01.12 |