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
- level3
- 드림핵
- 훈수 가능
- 꿀팁 환영
- Dreamhack
- API 활용 신청
- 공공데이터 포털
- 새로고침
- 티스토리챌린지
- 블로그 뉴비
- url 랜더링
- web-view
- 프로그래머스
- 개발
- 사업계획서
- 오블완
- apk 빌드
- 코딩테스트
- php-1
- python
- 창업 300
- expo
- 보안
- react-router-dom
- 고고학 최고의 발견
- Redux
- 부산 맛집 OPEN API
- redux state값 유지
- React
Archives
- Today
- Total
1223v
[BOJ] Python 백준 Yes or yes(25195) 본문
https://www.acmicpc.net/problem/25195
백트래킹을 통한 뚫린 길 찾는 완전 탐색 문제이다.
결론적으로 팬이 있는 길을 피해 끝까지 도달해야함으로
끝 도달 판단, 팬이 있는지 검증이 중요하다.
문제에서는 사이클이 존재하지 않는다고 했으므로, 끝으로 도달 하는 판단은 s[v]가 비어있으면 끝에 도달했다고 판단하면 된다.
이를 통해 팬 없이 s[v]가 0인 곳까지 오면 팬 없는 길이 존재한다는 뜻이 된다.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(1000000)
N,M = map(int,input().split())
s= [[] for _ in range(N+1)]
visited = [False] * (N+1)
for _ in range(M):
u,v = map(int,input().split())
s[u].append(v)
F = int(input())
F_lst = list(map(int, input().split()))
chk = False
def dfs(v):
global chk
if v in F_lst:
return
if len(s[v]) == 0:
chk = True
else:
for i in s[v]:
if not visited[i]:
visited[i] = True
dfs(i)
visited[i] = False
dfs(1)
if chk:
print("yes")
else:
print("Yes")
회고.
문제에서 사이클이 없다고 했는데 문제를 잘 읽지 않고 사이클이 존재하는 상태에서 끝점을 판단하는 방법을 고민하고 있었다...
문제를 잘 읽고 조건을 판단하는 노력을 더 해야겠다.
728x90
'PS' 카테고리의 다른 글
[BOJ] Python 백준 카드 문자열(13417) (0) | 2024.11.11 |
---|---|
[BOJ] Python 백준 토마토(7569) (2) | 2024.11.10 |
[BOJ] Python 백준 특정 거리의 도시 찾기(18352) (0) | 2024.11.07 |
[BOJ] Python 백준 촌수계산(2644) (0) | 2024.11.04 |
[Progammers] Python 프로그래머스 모음사전(84512) (0) | 2024.11.03 |