asci   3년 전

선배님들 혹시 아래 코드에서 반례가 있을 수 있을까요? 게시판에 반례는 전부 정답으로 처리가 되는데, 

[자신이 얼리어답터가 아니면 인접(다음)노드는 얼리어답터야 한다] 라는 생각으로

자신이 얼리어탑터일때 / 얼리어답터가 아닐 때를 카운트 해서 작은 쪽을 선택하도록 코딩을 하였는데, 생각이 잘못된건지

아니면 예외를 상정하지 못한건지 계속해서 틀림으로 뜹니다. 혹시 틀린점이 보여 도움을 주신다면 감사하겠습니다ㅠ!!

plan222   3년 전

반례

10
1 2
2 3
2 4
4 6
4 5
6 7
6 8
8 9
8 10

답: 4

출력: 5

깊이 기준으로 홀수 혹은 짝수를 전부 고르는 방법은 전부 전파 되기는 하겠지만 최소 횟수라고 장담할 수는 없습니다.

plan222   3년 전

더 쉬운 반례:

6

1 2

2 3

2 4

4 5

4 6

답:2

출력:3

작성하신 코드는 트리의 아래쪽이 어떻게 되어있는 상관없이 현재 상태만 보고 답을 결정합니다.

뒤 쪽의 상태와 관계없이 항상 정답으로 간다는 보장이 있는 선택지가 있어야만 이러한 알고리즘, 즉 그리디 알고리즘을 적용 할 수 있습니다.

문제를 푸실 때 그리디 보단 동적계획법을 먼저 고려해보시는게 좋을 것 같습니다.

동적계획법을 한번 생각하고 나면, 이 그리디 알고리즘이 합당한가?를 생각할 때 도움이 되기 때문입니다.

asci   3년 전

바쁜시간내어 도움주셔서 감사합니다 선배님 ㅠㅠ 반례주신걸 그려보고 나서야 왜 안되는지 알게되었네요 조언도 숙지하겠습니다!!

댓글을 작성하려면 로그인해야 합니다.