Skip to content

Conversation

@beberiche
Copy link
Contributor

No description provided.

@github-actions
Copy link

솔루션을 올려주셔서 감사합니다.
아래 정보가 맞는지 확인해주세요.

문제 링크: https://www.acmicpc.net/problem/2637

작성자: beberiche
언어: Java
사이트: baekjoon
풀이 설명: 
1. 위상 정렬 응용 문제. 주어진 입력값에 대해 기본 부품, 중간 부품을 구분 하는 방법을 알면 쉽게 풀 수 있다.

2. 완제품으로 부터, 필요한 부품들을 찾아 그래프를 형성하는 경우,
   기본 부품은 리프 노드에 해당하며, 더이상 탐색이 진행 되지 않는,
   즉 \`outDegree\`(진출차수) 가 \`0\` 인 노드를 의미한다.
   반대로 \`outDegree\` 가 \`0\` 보다 크다면, 해당 노드는 완제품 혹은 중간 부품에 해당한다.

3. 해당 문제의 경우, \`N\` 이 완제품이므로,
   \`N\` 을 제외한 \`outDegree\` 가 \`0\` 보다 큰 노드는 모두 중간 부품이 된다.

4. 입력 값 마다 \`inDegree\` 와 \`outDegree\` 를 구한 후,
   완제품 \`N\` 을 시작으로 위상 정렬 탐색을 진행한다.
   만약 부모 노드가 \`n\` 개 필요한 경우,
   필요한 부품은  $n*cnt_{idx}$ 의 총합이 된다. 이를 \`dp\` 점화식으로 표현하자면 다음과 같다.
   $dp[p] = dp[p] + (dp[c] * cnt)$

5. 누적된 \`dp[]\` 내에서, 기본 제품만 골라 해당 노드의 인덱스와 누적값을 출력하면 정답이 된다.


@github-actions github-actions bot added solution 솔루션 PR baekjoon baekjoon Java Java labels Apr 27, 2024
@tony9402 tony9402 merged commit 31ce437 into tony9402:main Jan 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants