반응형
250x250
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
- 오미크론 자가격리
- 공모주 청약
- 사회조사분석사 2급 필기 공부방법
- 사회조사분석사 2급 독학
- 백준 알고리즘
- 사이킷런
- 파이썬 정렬
- 사회조사분석사 2급 필기 시험시간
- BFS
- 너비우선탐색
- DFS
- 2월공모주
- 그리디
- 사회조사분석사 2급 기출문제집
- 정렬
- 공모주
- 알고리즘
- 머신러닝
- 사회조사분석사 2급 접수
- 사회조사분석사 2급 필기 요약정리
- 벽부수고이동하기 파이썬
- 사회조사분석사2급실기신청
- 사회조사분석사 2급 공부방법
- 사회조사분석사 2급
- 공모주청약
- 백준
- 현대엔지니어링 수요예측
- 현대엔지니어링
- 사회조사분석사2급실기신청꿀팁
- 시물레이션
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 13023번] ABCDE - 파이썬 본문
① 문제 링크
https://www.acmicpc.net/problem/13023
13023번: ABCDE
문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.
www.acmicpc.net
② 알고리즘 분류
그래프 이론, 그래프 탐색, 깊이 우선 탐색
③ ★문제풀이 Point★
- N(인원수)의 범위가 2000이 최대이므로 방문 표시를 2001개 만들기
- dfs를 돌리며 조건(5명의 친구 관계가 성립)에 맞는지 확인
④ 풀이
이 문제는 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력하는 문제이다.
문제에서 캠프에 있을 수 있는 명수 N가 최대 2000이므로 방문 표시 visited를 2001개 지정해준다.
친구 관계를 나타내는 리스트 relations에는 각 인덱스 위치가 특정 사람의 번호라고 생각하고 친구 관계 데이터를 넣어준다.
그다음 0부터 N-1 번호까지 친구 관계를 확인하며 재귀함수 dfs(idx, depth)를 이용해 정답이 있는지 판별한다.
재귀함수 dfs(idx, depth)에서 재귀적으로 친구 관계 표시를 수행하되, 문제의 조건에 맞는 친구 관계가 5명 이상 존재한다면 depth = 4 정답을 표시해준다.
⑤ 코드
다음 코드는 Python3로 작성하였습니다.
# 13023번 ABCDE
from sys import stdin
input = stdin.readline
# 입력값 받기
n, m = map(int, input().split())
relations = [[] for _ in range(n)]
# 방문 표시
visited = [False] * 2001
# 정답 변수 생성
ans = False
# 친구 관계 입력받기
for i in range(m):
a, b = map(int, input().split())
# 친구 관계 등록
relations[a].append(b)
relations[b].append(a)
# dfs 이용
def dfs(idx, depth):
global ans
visited[idx] = True
# 친구 관계가 4번 이상 연결되어 있다면
if depth == 4:
# 정답 표시 후 리턴
ans = True
return
# 친구 관계가 존재하는지 확인
for i in relations[idx]:
# 아직 방문하지 않았다면
if not visited[i]:
# 방문 표시
visited[i] = True
# 재귀적으로 수행
dfs(i, depth + 1)
# 방문 표시 해제
visited[i] = False
# 0번부터 N-1번까지 확인하며
for i in range(n):
# 친구 관계 탐색
dfs(i, 0)
# 현재 방문 표시 해제
visited[i] = False
# 친구 관계가 존재한다면
if ans:
# 탈출
break
# 정답이 있다면 1 출력
if ans:
print(1)
# 정답이 없다면 0 출력
else:
print(0)
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 16947번] 서울 지하철 2호선 - 파이썬 (69) | 2022.03.16 |
---|---|
[백준 16929번] Two Dots - 파이썬 (39) | 2022.03.12 |
[백준 2805번] 나무 자르기 - 파이썬 (82) | 2022.03.10 |
[백준 1874번] 스택 수열 - 파이썬 (42) | 2022.03.09 |
[백준 3085번] 사탕 게임 - 파이썬 (48) | 2022.03.08 |
Comments