junyub2   2년 전

아래와 같이 풀었을 때, 마지막 줄 max(count) 쓰면 정답이고 count[-1] 쓰면 틀립니다. 이유가 뭘까요

import sys
n = int(sys.stdin.readline())
lst = [int(x) for x in sys.stdin.readline().split()]

count = [1 for x in range(n)]
for i in range(1, n):
    for j in range(i):
        if lst[i] < lst[j]:
            count[i] = max(count[i], count[j]+1)

print(n - max(count))

junyub2   2년 전

반례라고 주신부분이 max(count) 썼을때랑 count[-1] 썼을 때랑 값이 똑같이 나오기는 하지만... 그래도 감사합니다 !!

junyub2   2년 전

아 반례 찾았어요

6

1 2 1 2 1 2

일 때 문제가 생기더라고요

gkgk0231   1년 전

max(count)과 

count[-1]는 다른 개념이기 때문입니다.

count는 질문자님께서 다이나믹 프로그래밍으로 찾은 데이터들이 쌓여있는 리스트입니다.


max(count)는 질문자님이 찾은 정답중 가장 큰 값을 찾아주는 것이라 count중 항상 큰 값을 반환합니다.

근데 count[-1]는 리스트의 가장 마지막 값을 리턴하게 됩니다. 

여기서 count 리스트중 가장 큰 값이 항상 마지막에 있으리란 법은 없습니다. 따라서 count의 max값이 count 리스트의 마지막에 없는 경우 틀리게 됩니다.

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