1. Number of Ways (부분합)

    배열 세 부분을 나눠서 각 부분합이 동일하도록 나눠라 → 전체합의 1/3씩 있게 나누면 된다.

  2. Twins (그리디)

    최소 개수의 동전으로 가장 큰 값을 가질수 있는가 → 큰 값의 동전부터 가져가면 된다.

  3. Painting Fence (그리디)

    가로로 칠할수 있는 부분은 모두 가로로 칠해야 한다. 모든 판을 세로로 칠하는 것이 답이 아닌 이상, 가장 아래는 가로로 칠해야한다.→ 1) 전체를 세로로 칠하는 답 체크, 2) 키가 가장 작은 부분 펜스까지 가로로 칠한다.

  4. Boredom (dp)

    직전 수까지의 최적의 답에서 현재 수를 고르는 경우/ 고르지 않는 경우

  5. Approximating a Constant Range

  6. Linova and Kingdom (트리)

    루트까지 거리 - 자신 아래쪽 도시 개수를 모든 노드에서 구해서 큰 값부터 순서대로 구한다.

  7. Maximum White Subtree (어려운 트리)

    v를 포함한 서브트리 중, 흰색이 가장 많이 포함된 서브트리를 구해라

    양수인 노드는 무조건 포함 + 자기 노드를 포함하면 자기 노드를 포함한 가장 좋은 서브 트리

  8. Woodcutters (기본적인 DP)

    서있는 나무와 쓰러진 나무가 겹치면 안된다.(끝점도 겹치면 안됨)

    각각의 나무에서 왼쪽으로 쓰러질 경우, 서있는 경우, 오른쪽으로 쓰러질 경우에서 최선의 선택을 고른다.

  9. LIS

  10. Circular RMQ (Lazy update) n^2 → nlogn에 해결 가능

  11. A simple Task (문자열 sort)

    index tree를 26개 만들고 lazy update 사용. 내 아래쪽에 a 개수가 얼마나 있는지

  12. Ice Skating (graph, DFS)

  13. Dijkstra

    실제 path를 찾는 다익스트라