inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3주차개념 #2. 완탐과 원복

원탐과 원복

422

mch473700

작성한 질문수 16

0

강의 듣고 DFS랑 무슨 차이인지 한번에 정리가 안되어 글 남겨봅니다..

  1. DFS는 경로에 대해 완전 탐색하는 것은 맞으나 그 경로의 모든 경우의 수를 탐색하는 것은 아니다.
    왜냐하면 앞서 지나간 자리에는 visited가 걸려있으므로 목적지를 찍은 후 재귀로 중간 부분으로 돌아온다면 다른 경로로 진입했을 시 visited가 걸려있을 수 있고 어쩌면 목적지에 도달할 수 없을 수도 있다.

  2. 완탐과 원복에서는 목적지까지 도달한 후 왔던 경로에 대해 방문 처리를 원복하기 때문에 목적지로 도달하는 모든 경로의 경우의 수를 가져갈 수 있다.

따라서 코스트가 더 많이 요구되는 것은 완탐과 원복하는 것이며,

즉 단순히 원하는 목적지만을 탐색하는 것을 목표하고자 한다면 DFS.

모든 경우의 수를 확인하여 최소, 최대 값을 원한다면 완탐과 원복을 사용하자.

라고 이해했는데 뭔가 잘못 이해한 것 같습니다.

하지만 그걸 몰라서 질문을 잘 못하겠네요.. 답변 주신다면 감사하겠습니다.

c++ 코딩-테스트

답변 2

2

큰돌

안녕하세요 mch님 ㅎㅎ

  1. DFS는 경로에 대해 완전 탐색하는 것은 맞으나

     

    >> 아닙니다. 그저 깊이우선 탐색에 불과합니다. 보통 visited를 걸어서 방문한 정점은 다시 방문하지 않도록 합니다. 예를 들어 a - b - c

     

    - d

라고 했을 때 a, b, c, d 이렇게 탐색하지 a b c b d 이렇게 방문한 정점을 다시 방문하지는 않습니다.

경로라는 말이 좀 헷갈릴 수가 있는데 연결된 노드들을 모두 탐색하긴 하지만 모든 경로 a, b, c / a, b, d를 다 탐색하지는 않습니다.

  1. 완탐과 원복에서는 목적지까지 도달한 후 왔던 경로에 대해 방문 처리를 원복하기 때문에 목적지로 도달하는 모든 경로의 경우의 수를 가져갈 수 있다.

>> 앞서 설명한 예제에서 a b c b d 이런식으로 탐색하는게 완탐입니다. 문제의 정의에 따라 다른데 예를 들어 a부터 시작해 끝점까지 가는 경우의 수를 구한다라고 했을 때 a, b, c, d이렇게 탐색하면 안되겠죠?

a - b - c

a - b - d

라는 경우의 수가 필요한 것이기 때문에

a b c b d 이런식으로 탐색해야 합니다.

 

따라서 코스트가 더 많이 요구되는 것은 완탐과 원복하는 것이며,

>> 네 맞습니다. 기본적으로 단순 dfs보다는 정점을 더 탐색하므로 시간이 더 많이 들어 코스트가 더 많이 드는게 맞습니다.

즉 단순히 원하는 목적지만을 탐색하는 것을 목표하고자 한다면 DFS.

모든 경우의 수를 확인하여 최소, 최대 값을 원한다면 완탐과 원복을 사용하자.

>> 네 맞습니다. DFS는 깊이 우선탐색을 간단히 한다면.. 이라고 생각하시면 됩니다.

좀 더 정리를 해드리면 다음과 같습니다.

완전탐색 (Brute Force)과 원복

완전탐색은 모든 경우의 수를 탐색하는 방법, 경우의 수가 많을 때는 매우 비효율적일 수 있음. 이 때 dfs 등으로 구현됨. ex) 숫자조합, 암호해독

깊이 우선 탐색 (DFS, Depth-First Search)

깊이 우선 탐색은 한 경로를 최대한 깊게 탐색한 후, 다른 경로를 탐색하는 방법.하 나의 경우에 대해 깊이를 우선적으로 탐색. 재귀함수를 통해 구현, 연결된 모든 노드를 탐색하고자 할 때 유용 a, b, c, d / 방문한 정점을 다시 방문하지 않음. ex) 미로찾기



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

mch473700

답변 감사드립니다 이해할때까지 곱씹어 생각해보겠습니다

코딩 살구클럽 가입 문의

0

66

2

코딩살구클럽 가입문의

0

69

2

3-K private case 질문

0

65

2

안녕하세요. 코딩살구클럽 문의드립니다!

0

77

2

7:41 듣다가 질문합니다

0

77

2

코드 리뷰 요청드립니다!

0

83

2

코딩살구클럽 계정 문의

0

79

2

SK하이닉스 대비 강의수강

0

217

3

코딩살구클럽 등록부탁드립니다.

0

78

2

7-F 재귀로 풀시 런타임애러

0

74

1

1-N 문제 질문입니다. (+ 채점오류)

0

82

2

코딩살구클럽 가입 확인 부탁드립니다.

0

86

2

직장인 코테 합격 공부방법 문의

0

127

2

코딩살구클럽 가입 방법

0

96

2

6-H 체점 관련 질문

0

74

1

채점서버 연결 관련 질문입니다

0

101

2

삼성 s직군

0

88

1

삼성 코테 없어짐

0

212

1

코딩살구클럽 가입부탁드립니다

0

87

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

69

2

5-S 테스트 케이스 질문

0

78

2

코살 문제풀이 환경

0

88

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

81

1

추천 추가문제들

0

74

2