plaps153   2년 전

배열에 숫자가 있습니다.

[1, 3, 5, 7, 9, 4, 8, 1, 2]

N개의 묶음으로 묶고 (연속되어야 함) 그 각각 묶음의 곱의 합 중 최소값을 구하는 알고리즘은 어떤 알고리즘을 적용해야 할까요?

예를들어 위의 배열에서 4묶음으로 나눌경우

1번 : [1, 3, 5] [ 7, 9] [4, 8 1] [2] 이고 각 묶음의 곱은 15 + 42 + 32 + 2 이고 합은 91이고

2번 : [1, 3] [5, 7, 9] [4, 8] [1 2]일 때 각 묶음의 곱은 3 + 255 + 32 + 2 = 282입니다.

따라서 1번과 같이 묶을 때 최소값이 됩니다.

어떤 알고리즘으로 접근해야 할지 몰라 문의 드립니다.

slah007   2년 전

배열 길이가 작으면 그냥 모든 경우를 다 해보시면 됩니다.

근데 읽자마자 딱 꽂히는 풀이는

N개의 묶음의 모든 곱이 일정하므로 합이 최소이러면 최댓값이 최소여야 한다는 가정을 하고(짧게 생각한거라 틀릴 수도 있습니다)

이제 어떤 K에 대해 N개의 묶음을 모두 K 이하로 만들 수 있는지에 대한 결정 문제를 이진탐색으로 풀면 될 것 같습니다.

plaps153   2년 전

네 숙고해 보겠습니다.

일단 문제는 N이 1000개 일 때인데, 제가 풀어보니 100개만 넘어도 단순히 풀어서는 안되더라구요.

plaps153   2년 전

매개변수 탐색으로 해결하였습니다. 감사합니다!

댓글을 작성하려면 로그인해야 합니다.