14002번 - 가장 긴 증가하는 부분 수열 4
DP로 풀지 않고, 이진 탐색 라이브러리 bisect를 사용하여 코드를 작성했습니다 .
해당 코드를 제출할 시에, 곧바로 '틀렸습니다 .' 가 리턴됩니다 .
# 코드 설명
리스트 vector는 입력받은 전체 수열(리스트 seq)에서 If-else문에 의해 골라진 수들을 저장하는 리스트이며,
이를 실행하는 If-else문은 다음과 같습니다.
if (vector의 마지막 수 < 현재 비교하는 seq의 수):
vector의 맨 뒤에 현재 비교하는 seq의 수를 추가.
else:
vector의 마지막 수 앞에 있는 수들 중에서,
현재 비교하는 seq의 수보다 크거나 같음을 만족하는 수들 중 가장 작은 수와 현재 비교하는 seq의 수를 바꿈.
이렇게만 하면 LIS의 길이만 구할 수 있기 때문에,
리스트 vector안에 있는 숫자가 추가되거나 바뀔때마다 그 숫자의 앞에 있는 수를 리스트 parentNum에 저장하고,
그 값들을 마지막에 역추적하여 LIS를 출력하게 코드를 작성하였습니다.
분명 제가 어디서 구현을 잘못했으니 오답처리가 됬을 터인데,
몇시간 고민해도 결국 코드를 고칠 수 없어 이렇게 질문글을 올리게 되었습니다.
어느 부분에서 제가 놓치고 실수했는지 궁금합니다.
https://www.acmicpc.net/board/view/43159
비슷하게 푸신 것 같고, 댓글에 반례도 있네요.
댓글을 작성하려면 로그인해야 합니다.
pshtony1 4년 전
DP로 풀지 않고, 이진 탐색 라이브러리 bisect를 사용하여 코드를 작성했습니다 .
해당 코드를 제출할 시에, 곧바로 '틀렸습니다 .' 가 리턴됩니다 .
# 코드 설명
리스트 vector는 입력받은 전체 수열(리스트 seq)에서 If-else문에 의해 골라진 수들을 저장하는 리스트이며,
이를 실행하는 If-else문은 다음과 같습니다.
if (vector의 마지막 수 < 현재 비교하는 seq의 수):
vector의 맨 뒤에 현재 비교하는 seq의 수를 추가.
else:
vector의 마지막 수 앞에 있는 수들 중에서,
현재 비교하는 seq의 수보다 크거나 같음을 만족하는 수들 중 가장 작은 수와 현재 비교하는 seq의 수를 바꿈.
이렇게만 하면 LIS의 길이만 구할 수 있기 때문에,
리스트 vector안에 있는 숫자가 추가되거나 바뀔때마다 그 숫자의 앞에 있는 수를 리스트 parentNum에 저장하고,
그 값들을 마지막에 역추적하여 LIS를 출력하게 코드를 작성하였습니다.
분명 제가 어디서 구현을 잘못했으니 오답처리가 됬을 터인데,
몇시간 고민해도 결국 코드를 고칠 수 없어 이렇게 질문글을 올리게 되었습니다.
어느 부분에서 제가 놓치고 실수했는지 궁금합니다.