주어진 벡터 집합에서 최종적으로 한 번만 골라지게 두 벡터씩 골라서 차벡터의 합을 구했을 때, 그 합의 최소 길이를 구하는 문제입니다. 두 벡터씩 골라서 차벡터를 만들고 이 벡터들의 합을 구하는 것을 브루트 포스로 생각하려면 매우 복잡하여 생각하기 귀찮습니다. 조금 생각을 바꾸면 이 과정과 결과가 동일한 과정을 생각해낼 수 있는데, 바로 N
개의 벡터 집합에서 N/2
개의 벡터는 부호를 그대로, 나머지 N/2
개의 벡터는 부호를 거꾸로 돌린 후 전체 벡터의 합을 구하는 것입니다. 즉, 차벡터의 정의 $\overrightarrow{AB}=\overrightarrow{OB}-\overrightarrow{OA}$에서 차벡터가 N/2
개 생성되므로 $\overrightarrow{OB}$ 자리에 들어갈 벡터 N/2
개와 $\overrightarrow{OA}$ 자리에 들어갈 벡터 N/2
개를 고르는 것과 같습니다. 이렇게 보면 브루트 포스로 풀기 쉬워졌습니다. 이를 구현하여 차벡터의 합의 최소 길이를 구하면 됩니다.