김치 N 개를 N 개의 도시들에 배달하는데, 김치 공장과 각각의 도시들은 1차원 직선상의 점에 위치해 있다. 이 좌표계의 좌표 값은 정수임을 전제로 한다.
김치를 각 도시에 배달하면서 1차원 직선을 따라 1초에 한 칸씩 움직일 수 있고, 김치는 1초에 1만큼씩 쉬게 된다. 그리고 각 도시에 도착하는 그 순간 김치가 배달되는 것으로 가정한다. 즉, 어떤 도시에 도착하는 순간 해당 도시로 김치 배달이 완료된다. 각 도시에 김치가 도착했을 때의 김치의 쉰 정도의 합의 최솟값을 구하는 것이 이 문제의 목표이다.
김치 공장 위치를 기준으로 양옆을 왔다 갔다 하며 또는 한쪽 방향으로만 계속 이동하는 특징을 보이는데, 이러한 문제는 Dynamic programming으로 해결할 수 있다. 그리고 이 문제처럼 1차원 좌표계를 좌우로 움직이면서 주어진 모든 좌표나 위치에 도달했을 때 구할 수 있는 value의 최솟값 또는 최댓값을 구하는 문제 유형은 종종 보인다. 주목해야 할 점은 어느 한 지점 A에서 다른 지점 B로 이동할 때 A와 B 사이에 있는 지점들은 모두 방문을 한 것으로 처리해야 최솟값을 얻을 수 있다. 그러므로 김치 배달원이 배달한 도시들은 항상 연속적인 범위를 갖는다.
dp[left][right][where]: left부터 right까지 이 범위에 있는 도시들에 배달한 상태에서, 현재 배달원이 where에 있을 때 김치 쉰 정도 합의 최솟값
where: 현재 배달원이 left에 있는지 (where 값이 0인 경우), right에 있는지 (where 값이 1인 경우)
각 도시에 배달할 때마다 아직 배달을 완료하지 않은 남은 도시들로 배달해야 하는 김치들의 쉰 정도가 각각 누적되기 때문에 남은 도시들의 개수도 고려해 줘야 한다. 그러나 이는 이제까지 배달을 완료한 도시 범위만 알면 남은 도시들은 자연적으로 구할 수 있으므로 이를 또 다른 상태로 기억해야 할 필요는 없다.