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 |
Tags
- 오픽공부법
- 메모이제이션
- 영어말하기
- 이진탐색
- stack 스택
- 오픽
- 영어회화
- dynamicProgramming
- 탑다운
- 바텀업
- opic
- 주석
- 안드로이드주석
- English
- fibo
- 오픽점수잘받는방법
- 오픽가격
- 다이나믹프로그래밍
- dp
- 디피
- 안드로이드
- 이진탐색 #나무 자르기
- 오픽노잼공부방법
- 오픽노잼
- XML주석
- 피보나치수열
- XML
- topdown
- ㅂ
Archives
RUBY
[백준] 치즈 본문
출처:: https://www.acmicpc.net/problem/2636
분류:: BFS
1. 문제 이해 및 해결과정
1) 공기면 bfs하면서 큐에 넣기 2) 공기가 아니라면 공기에 닿은 것 더해주기 board[i][j]+=1 3) board[i][j]>=2 , 치즈가 공기에 1개이상 닿았다는 의미 이므로 녹임 |
2. 풀이방법
1. python
#치즈
#https://www.acmicpc.net/problem/2636
import sys
from collections import deque
sys.stdin = open("input.txt","r")
n,m=map(int,input().split())
board=[list(map(int,input().split())) for _ in range(n)]
dh=[-1,1,0,0]
dw=[0,0,-1,1]
sol=0
cheese=0
def bfs():
q=deque()
visited=[[False]*m for _ in range(n)]
q.append((0,0))
visited[0][0]=True
while q:
curh,curw=q.popleft()
for i in range(4):
nh=curh+dh[i]
nw=curw+dw[i]
if nh<0 or nh>=n or nw<0 or nw>=m:
continue
if visited[nh][nw]==True:
continue
if board[nh][nw]>=1:
board[nh][nw]+=1
else: #공기
q.append((nh,nw))
visited[nh][nw]=True
def melt():
global cheese
cnt=0
flag=False
for i in range(n):
for j in range(m):
if board[i][j]>=2: #녹일 수 있는 치즈, 공기에 닿음
board[i][j]=0 #녹임
flag=True
cnt += 1
#모두 녹기 한시간전 치즈를 저장하기 위해
if cnt:
cheese=cnt
return flag
while True:
bfs()
if melt()==True:
sol+=1
else:
break
print(sol)
print(cheese)
3. 오답원인
4. 알게된 점
'PS > BOJ' 카테고리의 다른 글
[백준] 게리맨더링2 | 삼성 (0) | 2020.09.11 |
---|---|
[백준] 감시 | 삼성 (0) | 2020.09.09 |
[백준] 미세먼지 안녕! | 삼성 (0) | 2020.08.31 |
[백준] 테트로미노 | 삼성 (0) | 2020.08.29 |
[백준] Puyo Puyo (0) | 2020.08.28 |
Comments