신장 트리란? 하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 그래프 G=(V, E)의 신장 트리는 정점 집합 V를 그대로 두고 |V|-1개만 남겨 트리가 되도록 만든 것이다. 간선들이 가중치를 갖는 그래프에서 간선 가중치의 합이 가장 작은 트리를 최소 신장 트리라 한다. 크루스칼 알고리즘 신장 트리 중에서 최소 비용으로 만들 수 있는 신장 트리를 찾는 알고리즘을 최소 신장 트리 알고리즘이라고 한다. 먼저 모든 간선에 대하여 정렬을 수행한 뒤에 가장 거리가 짧은 간선부터 집합에 포함시키면 된다. 이때 사이클을 발생시킬 수 있는 간선의 경우, 집합에 포함시키지 않는다. 📍 알고리즘 동작 과정 1. 간선 데이터를 비용에 따라 오름차순으로 정렬한다. 2. 간선을..
📚 문제 개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려 한다. 메뚜기 마을엔 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다. 각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다. 이 때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식랴창고가 공격받으면 바로 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다. 개미 전사를 위해 식량 창고 N개에 대한 정보가 주어질 때 얻을 수 있는 식량의 최댓값을 구하여라 📝 문제 해설 왼쪽부터 차례대로 식량창고를 털지 안 털지를 결정하는 경우와 특정..
정렬이란? 데이터를 특정한 기준에 따라서 순서대로 나열하는 것 선택 정렬 : 매번 '가장 작은 것을 선택' 배열에서 가장 작은 원소를 찾아 이 원소와 배열의 맨 앞에 있는 A[1]과 자리를 바꾼다. 그러면 방금 맨 앞자리로 옮긴 원소, 즉 가장 작은 원소는 자기 자리를 찾았으므로 이 원소는 정렬이 끝났다고 볼 수 있다. 따라서 이제 이 원소를 제외한 나머지 원소들로 같은 작업을 반복하면 된다. package sorting; public class sorting01 { public static void main(String args[]){ int[] array = {7, 5, 9, 0, 3 ,1, 6, 2, 4, 8}; for(int i=0; i
📚 문제 동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야 한다. N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오. 📝 문제 해결 배열 A의 가장 작은 원소와 배열 B의 가장 큰 원소를 교체해줘야함 배열 A는 오름차순으로 배열 B는..