YunGoon   6년 전

제 풀이는 이러합니다.


0. 맨 앞과 맨 뒤 그 어느 쪽도 현재 먹어야 하는 약과 겹치는 게 없다면 탐색을 종료합니다.

1. 맨 앞과 맨 뒤가 서로 다르고, 현재 먹어야 하는 약과 겹치는 게 있다면 그 겹치는 쪽을 선택합니다.

2. 맨 앞과 맨 뒤가 같고, 현재 먹어야 하는 약과 겹친다면 여기서는 다음을 수행합니다.

    2-1. 앞쪽에서 접근했을 때 길이를 구합니다.

    2-2. 뒤쪽에서 접근했을 때 길이를 구합니다.

    2-3. 길이가 긴 쪽을 선택합니다. 이때, 길이가 같다면 어느 쪽을 선택하든 상관 없습니다.


충분히 이 풀이로도 풀릴 것 같은데 21%에서 자꾸 틀리네요.

그리디에 대한 반례가 존재하는 것 같은데... 그 말은 결국 길이가 짧은 쪽을 선택했을 때가 최적해인 경우가 있다는 건가요?

소스도 첨부하겠습니다.

djm03178   6년 전

반례입니다.

4

BLDLDBBLDDLB

이건 왼쪽을 L, 오른쪽을 R이라고 할 때 다음과 같이 하면 모두 먹을 수 있습니다.

LLLRLLLRRLLL

하지만 이 코드에서는 이를 6개만 먹을 수 있다고 판단합니다. 오른쪽의 세 개를 먼저 먹기 때문에, 뒤늦게 왼쪽을 먹어도 더이상 나아갈 곳이 없습니다.

YunGoon   6년 전

와... 전혀 생각지도 못한 반례네요 ㅠㅠ 감사합니다.

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