BOJ: https://www.acmicpc.net/problem/2410
먼저 홀수의 경우 항상 1이 필요함을 알 수 있음.
그러면 그 1을 빼고 생각하면 사실상 하나 적은 수를 2의 멱수의 합으로 나타내는 것과 동일함.
따라서 n이 홀수일 때 D[n] = D[n-1] 임을 알 수 있음.
짝수일 경우 1을 몇 개 사용할 지 정하고 개수를 센다고 생각하면,
1을 0개 사용할 경우는 2 이상의 수로만 n을 만드는거니까, 전체를 2로 나누면 사실상 n/2를 합으로 표현하는 개수를 찾는것과 동일함.
마찬가지로 1을 2개 사용할 경우는 n/2-1, 4개 사용할 경우는 n/2-2, ...
이걸 코드로 나타내면 아래와 같음
헐 이게 단일 for로 되네?
아 탑다운은 힘든 문제였네...
이걸 어떻게 배열 2줄짜리로 푸노
D1하고 D2하고 뭔지 설명좀 해줘
D1은 실제 값을 나타낸 배열이고 D2는 인덱스 i까지의 d1배열의 합을 나타낸 거
종이에 좀 끄적여보니까 이해 됨 ㄹㅇ
이게 O(n)으로 풀리네 ㄷㄷ..