[백준`G4] 2636 - 치즈 (Python)

2024. 3. 14. 01:11· 알고리즘/백준
목차
  1. 문제 설명
  2. 문제 풀이
728x90

문제 설명

https://www.acmicpc.net/problem/2636

 

2636번: 치즈

첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진

www.acmicpc.net

 


문제 풀이

처음에는 치즈의 구멍을 고려하지 않고 문제를 풀었더니 당연히 실패 ...

공기가 있는 부분을 탐색하는 BFS랑, 치즈 조각을 탐색하는 BFS로 두 개의 함수를 사용하였다.

 

치즈 조각을 탐색하면서 근처에 공기가 한 칸이라도 있으면, set에 넣은 후

치즈가 녹는 부분들을 공기로(0으로) 만들어주었다.

그 후 공기 탐색 BFS 때 음수로 처리해주었던 공기 칸들을 다시 0으로 만들어주었다.

from collections import deque
def air_bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if board[nx][ny] == 0:
queue.append((nx, ny))
board[nx][ny] = -1
def cheese_bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if board[nx][ny] == 1:
queue.append((nx, ny))
board[nx][ny] = board[x][y] + 1
if board[nx][ny] < 0:
melt.add((x, y))
n, m = list(map(int, input().split()))
board = [list(map(int, input().split())) for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]
melt = set()
queue = deque()
cnt = 0
while True:
queue.append((0, 0))
air_bfs() # 공기 BFS
positive = False
# 치즈가 남아있는지 검사
for i in range(n):
for j in range(m):
if board[i][j] > 0:
positive = True
break
if positive:
break
# 모두 녹았을 때
if not positive:
print(cnt)
print(len(melt))
break
# 치즈가 남아있을 때
else:
cnt += 1
rst = 0
melt.clear()
# 치즈 부분 BFS
for i in range(n):
for j in range(m):
if board[i][j] > 0:
queue.append((i, j))
cheese_bfs()
# 녹는 부분 공기로 만들기
for mt in melt:
x, y = mt
board[x][y] = 0
# 공기 부분 다시 0으로 만들기
for i in range(n):
for j in range(m):
if board[i][j] < 0:
board[i][j] = 0
728x90
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준`G5] 2294 - 동전 2 (Python)  (0) 2024.03.22
[백준`S1] 14888 - 연산자 끼워넣기 (Python)  (2) 2024.03.22
[백준`G5] 7569 - 토마토 (Python)  (0) 2024.03.14
[백준`G5] 13023 - ABCDE (Python)  (3) 2024.03.08
[백준`S1] 1932 - 정수 삼각형 (Python)  (0) 2024.03.06
  1. 문제 설명
  2. 문제 풀이
'알고리즘/백준' 카테고리의 다른 글
  • [백준`G5] 2294 - 동전 2 (Python)
  • [백준`S1] 14888 - 연산자 끼워넣기 (Python)
  • [백준`G5] 7569 - 토마토 (Python)
  • [백준`G5] 13023 - ABCDE (Python)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • 주간회고
  • spring boot
  • 오블완
  • fe
  • 실습
  • cs
  • bfs
  • 알고리즘
  • 구현
  • dfs
  • 티스토리챌린지
  • 리눅스
  • 자료구조
  • Gateway
  • be
  • db
  • AWS
  • DP
  • 그리디
  • 프로그래머스
  • 백준
  • 우선순위 큐
  • js
  • 네트워크
  • web
  • Java
  • 트리
  • 백트래킹
  • vue
  • 회고

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[백준`G4] 2636 - 치즈 (Python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.