티스토리 뷰

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

[ 문제 요약 ] 

- 주어진 입력에 대해 DFS와 BFS탐색 결과 출력. (단, 정점 여러개인 경우 작은 것을 먼저 방문.)

[ 풀이 과정 ] 

- 기본 개념을 기반으로 한 문제 였지만, 메모리초과 문제로 고생한 문제입니다 ㅠㅠ

- DFS는 재귀를 사용하였고, BFS는 큐를 사용하였습니다.

- 메모리 초과의 문제는 BFS의 문제였습니다. 처음에는 vertex를 큐에 넣고 뺄 때 check(출력의 유무를 확인하는 배열)를 true로 바꿨던 것이 원인이었고, 큐에 넣으면서 check를 true로 바꾸면서 해결할 수 있었습니다. (해결하고나니 간단한 문제였습니다ㅠㅠ)

[ 소스 코드 ]

- 49번째 줄의 정렬은 문제에서 제시한 숫자가 작은 정점을 먼저 방문하기 위함입니다. ( 문제 질문에 왜 정렬을 해야하는지에 대한 질문이 있더라고요! ㅎㅎ)

- 이 문제의 핵심은 BFS와 DFS모두 방문한 요소를 중복하여 집어넣거나(queue나 stack에), 재귀 호출의 중복을 방지하는 것이 핵심이라고 생각합니다!


+ DFS를 stack을 이용하여 구현해 보았습니다.