Skip to content

06 최소 신장 트리 #32

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

06 최소 신장 트리 #32

wants to merge 3 commits into from

Conversation

dalsu0222
Copy link
Contributor

@dalsu0222 dalsu0222 commented Mar 23, 2025

아직 3문제 밖에 풀지 못하였지만, 일단 올려두겠습니다! 늦게 올려서 죄송합니다😓

💭최소신장트리(MST) 아이디어

최소 신장 트리 문제를 접하면서 느낀 점은, 알고리즘 자체는 템플릿을 외우면 풀린다고 느껴서 어렵지는 않았습니다.

기본 템플릿은 다음과 같습니다.

  • 크루스칼 알고리즘 → 간선을 정렬하고 유니온-파인드로 연결
  • 프림 알고리즘 → 정점 중심으로 우선순위 큐 이용

그래서, 템플릿을 알면 문제푸는것은 방법이 정해져있으므로, ‘이 문제가 왜 MST 문제인가’를 먼저 판단하는 게 더 중요하다고 생각이 들었습니다.

🎯MST문제인지 판별하는 포인트?

개인적으로 다음과 같은 표현이 문제에 보인다면 MST임을 의심해봐도 좋을 것 같습니다!(다른 의견도 환영합니다)

  • "모든 정점을 연결하는 최소 비용을 구하라"
  • "모든 도시를 연결하는 최소한의 비용은?"
  • "길을 새로 놓을 때 최소한의 비용으로 연결"
  • "전부 연결하되 총 비용 최소"

🐛문제를 풀면서 반복되었던 실수

static void union(int x, int y) {
		int root_x = find_root(x);
		int root_y = find_root(y);
		
		if(root_x != root_y) {
			parent[root_y] = root_x;	// 루트끼리의 병합
		}
	}

서브트리를 다른 서브트리로 합치는 과정에서 잦은 실수가 있었습니다..

이론상 서브트리의 루트노드를 가지고 union을 실행해야 두 개의 집합이 온전히 이어지는데,

자꾸 그냥 노드 x,y를 사용해서 풀어 예제는 맞지만 제출하면 틀리는 기묘한 상황이 몇 차례 반복되었습니다.

✅ 잊지 말자!

  • 유니온은 무조건 루트끼리 연결해야 한다.

@dalsu0222 dalsu0222 self-assigned this Mar 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant