30에 대한 dp를 계산할 때 처음에 dp[0]에 저장된 1에 1을 더해서 2로 갱신되고, 그 다음 dp[1]에 저장된 2에 1을 더해서 3으로 갱신되고, 그 다음 dp[2]에 저장된 1에 1을 더해도 갱신이 안 되니까 그대로 3으로 남게 됩니다. dp[1]에는 이미 그 값이 10 -> 20으로 건너온 것이라는 흔적이 남아있는 것이고, dp[2]에는 그 이전에 넘어올 값 없이 자기 혼자뿐이었다는 흔적이 남아있는 것입니다.
그리고 result를 0으로 초기화하면 n=1인 경우 result가 한 번도 갱신되지 않기 때문에 0을 출력해서 틀리게 됩니다.
lh1990 4년 전
하도 풀이를 많이 찾아보다보니 답 코드를 외워버려서;;;
일단 맞추긴했는데 아무리 풀이를 읽어도 몇가지가 이해가 안갑니다..
아래 전체 코드중 핵심 코드인 dp[i]<dp[j]+1 부분이 돌아가는 원리와 이유(풀이를 여기저기서 읽어도 이해가 안되네요..)
그리고 a[i]>a[j]가 조건인건 뒤에수가 커야하니까 라는건 알겠습니다 근데 증가하는 부분수열인데??
10,20,10,30 의경우 10 > 20 > 30 으로 가야하는데 a[i]>a[j] 이면 10 20 10 30 이렇게 경우의수가 다 가능하지 않나요??
10 다음 20 다음 10이 아니라 바로 30을 탐색하는 if조건이 없는데 정답이 나오는게 궁금합니다
그리고 전체코드중 result를 1로하면 맞았다고 나오는데 0으로하면 오답이라 나옵니다
요렇게 궁금한데 명확하게 설명해주시면 정말정말 감사드립니다 ㅠㅠ