티스토리 뷰

알고리즘/백준

백준 1007 벡터 매칭 C++

4567은 소수 2021. 6. 2. 00:49

https://www.acmicpc.net/problem/1007

 

1007번: 벡터 매칭

평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속

www.acmicpc.net

N개의 점을 시점과 종점이 겹치지 않게 벡터를 N/2개를 만들고 벡터들의 합 벡터의 크기를 최소로 만드는 문제입니다.

단순히 20개의 점을 2개씩 묶는다고 생각하면 20C2 * 18C2 * ... 2C2 가 되어 엄청난 경우의 수가 나옵니다

 

A, B 두 점을 이은 벡터 AB는 결국 원점을 기준으로 OB - OA 입니다. 결국 N개의 점 중 N/2개의 점은 뺄셈을 적용, 나머지는 덧셈을 적용한 것과 합 벡터와 동일합니다. 그렇기 때문에 20개의 점 중 10개를 고르는 문제와 동일해지고 20C10으로 해결할 수 있습니다.

 

N개의 점 중 N/2개를 골라 원점을 기준으로 벡터 뺄셈을 적용하고 나머지는 덧셈을 적용합니다. 이런 식으로 가장 작은 값을 고르면 됩니다.

 

(처음에 계속 틀리길래 뭐지 했는데 마지막에 줄바꿈을 안 했었다.... 조심하자!)

 

코드는 다음과 같습니다. 

'알고리즘 > 백준' 카테고리의 다른 글

백준 17142 연구소3 C++  (0) 2021.06.04
백준 10840 구간 성분 python3  (0) 2021.06.02
백준 18353 병사 배치하기 python3  (0) 2021.05.28
백준 1013 Contact C++  (0) 2021.05.28
백준 10164 격자상의 경로  (0) 2021.05.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함