알고리즘/탐욕법(Greedy) 5

프로그래머스 - 섬 연결하기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42861 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 크루스칼 알고리즘을 알면 바로 풀 수 있는 문제이다.https://developerwoohyeon.tistory.com/192 신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.developerwoohyeon.tistor..

신장트리(Spanning Tree), 최소신장 트리(Minimum Spanning Tree)

신장트리 신장 트리란 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻한다. 하나의 그래프에는 신장 트리가 많이 존재할 수 있다. 단, 그래프의 모든 정점을 포함 해야한다.  최소 신장 트리 최소신장트리는 신장 트리중 간선의 가중치 합이 가장 작은 트리를 말한다. 알고리즘 문제에서 유용하게 사용될 수 있다.ex)섬 연결하기 (프로그래머스)전력망을 둘로 나누기 (프로그래머스)별자리 만들기 (백준 4386)네트워크 연결 (백준 1922)도시 분할 계획 (백준 1647) 최소 신장 트리 구현 최소 신장 트리 구현의 대표적인 알고리즘은 크루스칼 알고리즘이다. 크루스칼 알고리즘 과정 1) 간선은 가중치를 기준으로 오름차순 정렬한다.  2) 간선을 하나씩 살핀다. 간선을 MST에 추가했을 때 MST에..

프로그래머스 - 구명보트

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 이해가 어렵진 않았으나 시간초과를 극복하는게 중요했던 문제이다. 문제를 보고 오름차순 정렬 후 무게가 적은 사람과 무게가 큰 사람을 같이 태워야 보트를 최소한으로 사용할 수 있겠다고 생각했다. import java.util.*;class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); ..

프로그래머스 - 큰 수 만들기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr number의 자리수는 2자리 이상, 100만자리 이하 이므로 모든 경우를 구해서 최대값을 구하게 되면 무조건 시간초과가 발생한다. 따라서 최적의 경우를 구할 수 있는 그리디 알고리즘을 생각해야 한다. EX)4177252841K=4 K가 4 이므로 최종 숫자의 길이는 10-4=6이 되어야 한다. 여섯자리 숫자를 구해야 하므로 처음의 (41772) 중에서 시작점을 구해야 한다.만약5가 시작점이 된다면 여섯자리 숫자를 만들 수 없기 때문이다. 가장..

프로그래머스 - 체육복(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42862# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 보기에는 쉬워보이나 예외 케이스가 많아서 생각이 많아지는 문제였다. 우선 오류가 생기는 코드부터 확인해보자. 우선 lost배열과 reserve배열을 비교하며 앞뒤 번호에 여분이 있는지만 체크를 해봤다.import java.util.*;class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer = n-lost.length; ..