pshtony1   4년 전

DP로 풀지 않고, 이진 탐색 라이브러리 bisect를 사용하여 코드를 작성했습니다 .

해당 코드를 제출할 시에, 곧바로 '틀렸습니다 .' 가 리턴됩니다 .



# 코드 설명

리스트 vector는 입력받은 전체 수열(리스트 seq)에서 If-else문에 의해 골라진 수들을 저장하는 리스트이며,

이를 실행하는 If-else문은 다음과 같습니다.

if (vector의 마지막 수 < 현재 비교하는 seq의 수):

    vector의 맨 뒤에 현재 비교하는 seq의 수를 추가.

else:

    vector의 마지막 수 앞에 있는 수들 중에서,

    현재 비교하는 seq의 수보다 크거나 같음을 만족하는 수들 중 가장 작은 수와 현재 비교하는 seq의 수를 바꿈.


이렇게만 하면 LIS의 길이만 구할 수 있기 때문에,

리스트 vector안에 있는 숫자가 추가되거나 바뀔때마다 그 숫자의 앞에 있는 수를 리스트 parentNum에 저장하고,

그 값들을 마지막에 역추적하여 LIS를 출력하게 코드를 작성하였습니다.



분명 제가 어디서 구현을 잘못했으니 오답처리가 됬을 터인데,

몇시간 고민해도 결국 코드를 고칠 수 없어 이렇게 질문글을 올리게 되었습니다.

어느 부분에서 제가 놓치고 실수했는지 궁금합니다.

shg9411   4년 전

https://www.acmicpc.net/board/view/43159

비슷하게 푸신 것 같고, 댓글에 반례도 있네요.

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