(DFS) 백준 10552번 DOM

DARTZ·2022년 4월 27일
0

알고리즘

목록 보기
22/135
from collections import deque
import sys
input = sys.stdin.readline
n, m, p = map(int, input().split())
s = [[] for i in range(m + 1)] # 요소 탐색을 위한 그래프를 만들어준다.
visit = [[] for i in range(m + 1)] # 방문을 체크하기 위해 visit 배열을 만들어준다.
for i in range(n): # n만큼 요소를 넣어 그래프들을 초기화 해준다.
    a, b = map(int, input().split())
    s[b].append(a)
    visit[b].append(0)
def dfs(start): 
    q = deque() # 연결 그래프를 검사하기 위한 큐를 만든다.
    q.append(start) # 처음 que 값을 집어넣고
    cnt = 0 # 갯수를 기록할 변수 초기화
    while q: # 큐에 요소가 없을때 까지 반복
        st = q.popleft() # 큐에 있는 값을 꺼내서 (start값)
        for i in range(len(s[st])): # 그래프 요소 수만큼 반복
            if s[st][i] != 0 and visit[st][i] == 0: # 아직 방문하지 않았고 그래프가 연결 되어 있으면
                q.append(s[st][i]) # que에 추가
                visit[st][i] = 1 # 방문 처리
                cnt += 1 # 갯수 하나 추가
                break
            if visit[st][i] == 1: # 이미 방문했을 경우 (순환그래프일 경우) -1을 반환
                return -1
    return cnt
print(dfs(p)) # p부터 시작

문제를 이해 못했다. 그래서 정답 코드를 보고 문제를 이해했다.. 단순히 문제가 아니라 요상한 스토리를 영어로 표현해서 문제를 내니 헛갈렸던 것 같다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글