백준 1774. 우주신과의 교감 (파이썬- 최소신장트리, 크루스칼)

ppm_Vely·2022년 6월 21일
0

코딩테스트

목록 보기
2/21

문제를 요약하면..

최소신장트리를 구하는 문제로

최소의 비용으로 우주신을 연결시키면된다.

단, 이 문제의 포인트이자 다른 문제와의 차이점은 문제에서 일부 간선 edge가 주어진다.

다시말해 일반적으로 최소 신장 트리문제는 크루스칼을 이용해서 최소의 비용의 합계를 구하면된다.

여기서는 최소가 아니더라도 일부 간선이 주어진다.

이 간선이 확정된 상태에서 최소 신장 트리를 구해야 하는게 포인트다!

시도 1. 정답

크루스칼 알고리즘을 사용한다.

오류 해결사항

계속 무한루프 오류가 걸렸었다..

무한루프 제한도 걸어두었는데 어디가 문제일까..

다른 정답코드와 비교해보니 흐름은 다 똑같은데 어디가 문제일까 봤더니

find_parent 함수에서 parent[x] = find_praent(parent,x) 로 써논것이었다..

계속 부모노드 (직계 부모노드 혹은 root노드)를 호출하니 무한재귀에 걸릴 수 밖에 없었다.

그래서 parent[x] = find_parent(parent,parent[x])로 고쳐 부모노드의 부모노드를 재귀호출할 수 있도록 수정했다.

-- 사소하지만 코드짜다보면 간과하기 쉬우므로 기억해두자!

※추가사항※

"소수2째자리까지 숫자를 출력하려면?"

방법1. print(round(result,2)) --틀림
방법2. print(".2f"%(result)) --맞음
방법3. print(f"{result:.2f}") --맞음

처음에는 방법1을 생각했다. 가장 먼저 떠오르는 방식이니까..

방법 3가지 다 똑같으며 맞는 방식이다. 하지만! 백준에서는 "틀렸다"고 뜬다.

그 이유는?

나의 생각이지만

round로 반올림하면 4.00의 경우 4.0까지만 출력된다.

즉, 소수이하 모두 0일 경우 (정수일 경우), 설정에는 소수2째자리까지 나타내라고 했지만 무조건 소수 첫째자리까지만 출력된다.

그래서 틀렸다고 한걸까..

방법2, 방법3으로 출력하면 백준에서는 "맞았다"고 뜬다.

round와 달리 4.00처럼 소수자리 모두 0이어도 조건에 설정한 소수2째자리까지 생략안하고 출력한다!

이런 미묘한 차이점이 있었으니 알아두자~!!

profile
오늘도 개발중인 ppm's Programming Log

0개의 댓글