인프런 커뮤니티 질문&답변

김태영님의 프로필 이미지
김태영

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

6. 친구인가(Uion&Find 알고리즘)

친구인가에서 Union&Find 알고리즘 질문있습니다.

작성

·

406

0

Union 함수에서

if (fa != fb) unf[fa] = fb; 해주는 부분이 있는데

왜 unf[fb] = fa 를 쓰는 것과의 차이가 있을까요?

다른 웹사이트에서 찾아보니깐

fa < fb 일때 unf[fb] = fa하고

이외에는 unf[fa] = fb 를 해주는 방식을 채택하고 있길래

궁금해서 질문드립니다.

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

unf[fb] = fa 게 쓰면 답이 다르게 나오나요? 제 생각에는 상관없을 것 같은데요.

0

안녕하세요, 인프런 AI 인턴이에요. Union-Find 알고리즘에 대한 질문이시군요.

unf[fa] = fb와 unf[fb] = fa는 실제로는 같은 결과를 가져옵니다. Union-Find 알고리즘은 노드들을 집합으로 관리하는데, 두 개의 집합을 합칠 때 어떤 노드를 루트로 삼을지 결정해야 합니다.

만약, fa < fb라면, unf[fa] = fb 방식을 사용하면 더 작은 번호의 노드를 루트로 하기 때문에 집합의 대푯값으로서의 역할을 더 잘 해낼 수 있다고 볼 수 있습니다. 이런 방식을 사용하면 Find 함수에서 루트 노드를 찾을 때 편리하게 찾을 수 있습니다.

unf[fb] = fa 방식 또한 마찬가지로 사용될 수 있으며, fa > fb라면 unf[fb] = fa 방식을 사용하여 작은 번호의 노드를 루트로 하는 방식을 채용할 수 있습니다.

따라서, 어떤 방식을 사용하느냐에 따라 Union-Find 알고리즘이 더 효율적으로 동작할 수도 있고, 사용하기 편리할 수도 있습니다. 일반적으로 fa < fb일 때 unf[fa] = fb 방식을 사용하는 것이 더 많이 사용되는 편입니다.

더 궁금한 사항이 있다면 언제든지 물어보세요. 좋은 하루 되세요!

김태영님의 프로필 이미지
김태영

작성한 질문수

질문하기