기록
분할정복으로 1부터 n까지 합 구하기 본문
반응형
int func(int n) {
if (n == 1) return 1;
else if (n % 2 == 1) return n + func(n - 1);
else return func(n / 2) * 2 + (n*n) / 4;
}
1 + 2 + ... + n
-> (1 + 2 + ... n/2) + ((n/2 + 1) + (n/2 + 2) + ... + (n/2 + n/2))
-> (1 + 2 + n/2) * 2 + (n/2 * n/2) // n/2가 n/2개 있음으로 뒤로 뺀다
따라서 n이 짝수일 때 f(n) = f(n/2)*2 + (n*n)/4
n이 홀수일 땐 f(n) = n + f(n-1)
n이 1이면 1을 반환
반응형
'[Study] > 코딩테스트 연습' 카테고리의 다른 글
[Python] 다트 게임 (0) | 2020.11.07 |
---|---|
[JAVA] 백준 11053 가장 긴 증가하는 부분 수열 (0) | 2020.10.10 |
[Python] 프로그래머스 level2 - 큰 수 만들기 (0) | 2020.10.08 |
백준 6198 (0) | 2020.06.03 |
[python] 피보나치수열 (재귀, DP) (0) | 2020.02.27 |