유클리드 호제법 예제 - 3

문제 분석

  • N - 1개의 비율로 N개의 재료와 관련된 전체 비율을 알아낼 수 있다고 한다.

  • 이것을 그래프 관점으로 생각하면 사이클이 없는 트리 구조로 이해할 수 있다.

  • 임의의 노드에서 DFS를 진행하면서 정답을 찾을 수 있다.

  • DFS 과정에서 유클리드 호제법을 이용해 비율들의 최소 공배수와 최대 공약수를 구하고, 재료의 최소 질량을 구하는 데 사용해 문제를 해결할 수 있다.

손으로 풀어보기

  1. 인접 리스트를 이용해 각 재료의 비율 자료를 그래프로 저장한다.

  • 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)

  1. 데이터를 저장할 때마다 비율과 관련된 수들의 최소 공배수를 업데이트한다.

  • A, B의 최소 공배수 = A * B / 최대 공약수

  • 1, 3, 5, 7의 최소 공배수 = 105

  1. 임의의 시작점에 최대 공배수 값을 저장한다.

  2. 임의의 시작점에서 DFS로 탐색을 수행하면서 각 노드의 값을 이전 노드의 값과의 비율 계산을 통해 계산하고 저장한다.

  • 0을 시작점으로 정하고 DFS 탐색을 수행하면 0 -> 4 -> 1 -> 2 -> 3 순으로 탐색

  • 4 -> 0번 노드 값 * 1/1 = 105

  • 1 -> 4번 노드 값 * 1/3 = 35

  • 2 -> 4번 노드 값 * 1/5 = 21

  • 3 -> 4번 노드 값 * 1/7 = 15

0
1
2
3
4

105

35

21

15

105

  1. 각 노드의 값을 모든 노드의 최대 공약수로 나눈 뒤 출력한다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated