Divide and conquer

설계 전략

Example

index location(index low, index high) {
	index mid;

	if (low > high)
		return 0;
	else {
		mid = (low + high) / 2;
		if (x == S[mid])
			return mid;
		else if (x < S[mid])
			return location(low, mid - 1);
		else
			return location(mid + 1, high);
	}
}

locationout = location(1, n);

BOJ 예제

10815번: 숫자 카드

Dynamic programming

설계 전략

Example

int bin2(int n, int k) {
	index i, j;
	int B[0..n][0..k];
	for (i = 0; i <= n; i++) {
		for (j = 0; j <= min(i, k); j++) {
			if (j == 0 || j == i)
				B[i][j] = 1;
			else B[i][j] = B[i - 1][j - 1] + B[i - 1][j];
		}
	}
	return B[n][k];
}

BOJ 예제

1932번: 정수 삼각형

1463번: 1로 만들기

Greedy algorithm