[파이썬] 백준 3109: 빵집 (골드2)
풀이
방향성 생각
- 왼쪽 위에서 탐색을 시작한다고 하면, 파이프를 최대한 오른쪽 아래에서 멀어지게 설치해야함.
- 파이프를 겹쳐서 놓을 수 없기 때문에, 다른 파이프를 막을 수 있기 때문
- 위쪽에서 탐색을 시작해서 최대한 파이프를 위에다 갖다놓자.
- 탐색 도중에 끝까지 도달하지 못하면, 다른 경로를 통해서 그 지점에 도달했을 경우에도 도달하지 못한다.
- 탐색하면서 arr를 바꿔준다. 백트래킹처럼 원상태로 돌릴 필요는 없다.
전체코드
import sys
input = lambda : sys.stdin.readline().rstrip()
H,W = map(int,input().split())
arr = [list(input()) for _ in range(H)]
inside = lambda x,y : 0<=x<W and 0<=y<H
answer = 0
def dfs(x,y):
global answer
if x == W-1:
arr[y][x] = answer
answer += 1
return True
arr[y][x] = answer
for ny in (y-1,y,y+1):
if inside(x+1,ny) and arr[ny][x+1] == '.' and dfs(x+1,ny):
return True
return False
for y in range(H):
if arr[y][0] == '.':
dfs(0,y)
print(answer)
코멘트
- .
'Algorithm > Greedy' 카테고리의 다른 글
[파이썬] 백준 12904 : A와 B (골드5) (0) | 2024.12.24 |
---|---|
[파이썬] 백준 1083 : 소트 (골드4) (0) | 2024.11.14 |
[파이썬] 백준 9576 : 책 나눠주기 (골드2) (1) | 2024.05.28 |
[파이썬] 백준 18234 : 당근훔쳐먹기 (골드3) (0) | 2024.04.02 |
[파이썬] 프로그래머스 : 인사고과 (레벨3) (0) | 2024.04.02 |
[파이썬] 백준 1736 : 쓰레기 치우기 (골드1) (0) | 2024.02.18 |
[파이썬] 프로그래머스 : n+1 카드게임 (Lv.3) (0) | 2024.01.18 |
댓글