유클리드 호제법 예제 - 3
문제 분석
N - 1개의 비율로N개의 재료와 관련된 전체 비율을 알아낼 수 있다고 한다.이것을 그래프 관점으로 생각하면 사이클이 없는 트리 구조로 이해할 수 있다.
임의의 노드에서 DFS를 진행하면서 정답을 찾을 수 있다.
DFS 과정에서 유클리드 호제법을 이용해 비율들의 최소 공배수와 최대 공약수를 구하고, 재료의 최소 질량을 구하는 데 사용해 문제를 해결할 수 있다.
손으로 풀어보기
인접 리스트를 이용해 각 재료의 비율 자료를 그래프로 저장한다.
0->4(1:1)1->4(3:1)2->4(5:1)3->4(7:1)4->0(1:1),1(3:1),2(5:1),3(7:1)
데이터를 저장할 때마다 비율과 관련된 수들의 최소 공배수를 업데이트한다.
A, B의 최소 공배수 =
A * B / 최대 공약수1, 3, 5, 7의 최소 공배수 = 105
임의의 시작점에 최대 공배수 값을 저장한다.
임의의 시작점에서 DFS로 탐색을 수행하면서 각 노드의 값을 이전 노드의 값과의 비율 계산을 통해 계산하고 저장한다.
0을 시작점으로 정하고 DFS 탐색을 수행하면0 -> 4 -> 1 -> 2 -> 3순으로 탐색4-> 0번 노드 값 * 1/1 = 1051-> 4번 노드 값 * 1/3 = 352-> 4번 노드 값 * 1/5 = 213-> 4번 노드 값 * 1/7 = 15
0
1
2
3
4
105
35
21
15
105
각 노드의 값을 모든 노드의 최대 공약수로 나눈 뒤 출력한다.
슈도코드
코드 구현 - 파이썬
코드 구현 - 자바
Last updated