• Home
  • About
    • Hooni photo

      Hooni

      Hooni coding

    • Learn More
    • Email
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

2020 동계 모각코 3주차 목표와 회고

13 Jan 2021

Reading time ~1 minute

3주차 (2021년 01월 13일)

목표

  • 인프런 파이썬 강의 1시간 수강

  • 수강 후 내용 실습

  • 알고리즘 < 최소 스패닝트리 > 문제풀기 (백준 1197번)

회고

  • 인프런 파이썬 강의 40분 수강 image

  • 배운 내용 jupyter notebook을 사용해서 실습

공부한 내용 : Python의 자료구조(리스트, 사전, 튜플, 세트, 자료구조의 변경) image

  • 알고리즘 < 최소 스패닝트리 > 문제 : 백준 1197번(“최소 스패닝트리”) -> 난이도 : 골드4

image

해결 방법 : 기본적으로 union-find를 사용해서 풀 수 있었다. 우선 우선순위 큐를 사용해서 간선의 가중치를 비교해서 작은 간선부터 선택하도록 했다. 간선을 선택한 후에 양 끝 점들을 find를 통해서 root를 찾고 root가 서로 다를 경우 cycle을 생성하지 않으므로 두 root를 union하고, 만약 같다면 cycle을 생성하므로 넘어간다. union을 했다면 간선을 추가한 것이기 때문에 result에 간선의 weight를 더해준다. 모든 간선에 대해서 반복 실행하고 result를 출력해서 해결 할 수 있다.

코드일부

for(int i = 0; i < e; i++) {
		Edge edge = queue.poll();
			
		int start = find(edge.start);
		int end = find(edge.end);
			
		if(start != end) {
			union(start, end);
			result += edge.weight;
		}
		else {
			continue;
		}
	}


Share Tweet +1