[JAVA] 크루스칼 알고리즘 (Kruskal Algorythm)
CS/알고리즘2025. 6. 14. 19:17[JAVA] 크루스칼 알고리즘 (Kruskal Algorythm)

최근 알고리즘 문제 풀이를 다시 시작하며 기억에서 희미해져버린 MST 알고리즘에 대해서 정리해볼까 합니다.정리하려는 주된 내용은 아래와 같습니다.❓ MST가 무엇인지, 크루스칼 알고리즘의 구현 및 동작 방식 📑 MST란?MST는 Minimum Spanning Tree의 약자로 최소 신장 트리를 찾기 위한 알고리즘입니다.또한 Spanning Tree(신장 트리)는 간단하게 설명하면 모든 정점을 포함하면서 사이클이 없는 연결 그래프를 의미합니다. 일반 신장트리와 최소 신장 트리는 아래 이미지를 참고해주세요.두 연결 그래프 모두 사이클(Cycle)이 없습니다. 또한 모든 정점을 포함하고 있습니다.모두 신장 트리이지만, 오른쪽 신장 트리의 가중치 합이 제일 최소가 됩니다.MST 알고리즘은 이렇게 만들 수 있는..

"같은 네트워크"가 무엇을 의미하는지
CS/네트워크2025. 3. 8. 18:43"같은 네트워크"가 무엇을 의미하는지

네트워크 스터디 준비를 하면서 문득 "같은 네트워크"라는 말이 이해가 안되서 한번 찾아봤습니다.오늘은 같은 네트워크가 무엇인지에 대해 정리 해보려합니다.  한줄로 요약해본다면 아래와 같습니다.서로 다른 장치가 직접적으로 통신이 가능하면 같은 네트워크. 그러나 직접적으로 통신이 가능한게 어떤것이며, 간접적으로 통신하는건 어떤건지에 대해 다시금 의문이 생겼습니다. 네트워크 영역은 아래와 같은 요소들로 논리적으로 구성되어 있습니다.VPC(Virtual Private Cloud)서브넷(Subnet)VLAN(Virtual LAN)네트워크 영역의 범위는 아래로 내려갈수록 작아집니다. 👀 "같다"라는 기준같은 네트워크가 되는 기준은 크게 IP 주소 체계, 서브넷, 라우팅 규칙, 네트워크 장비(스위치/라우터) 연결 ..

CS/알고리즘2025. 2. 7. 18:46[알고리즘] 특정 수열에서 양 옆 최대값을 O(1)로 구해보자!

✏️ 알고리즘 개요알고리즘 문제를 풀다보면 특정 수열에서 i번째 원소를 기준으로 왼쪽 혹은 오른쪽 원소들에 대해 최대값을 구해야하는 경우가 종종 있다. 아래와 같이 단순하게 왼쪽, 오른쪽 원소들에 대해 반복문을 통해 최대값을 구하는 것을 생각해볼 수 있다.int[] arr = new int[]{5,9,6,2,1,4,5,6,8,10,4};for(int i=0; i=0; j--) { leftMaxValue = Math.max(leftMaxValue, arr[j]); } //오른쪽 최대값 int rightMaxValue = 0; for(int j=i+1; j 그러나 수열의 길이가 매우 길어지고, 찾아야하는 원소의 개수가 많아질수록 위와 같은 반복문은 매우 긴 시간복잡도를 가지..

[PS] 백준1655: 가운데를 말해요 (Java)
CS/알고리즘2025. 2. 4. 21:46[PS] 백준1655: 가운데를 말해요 (Java)

🔗 문제https://www.acmicpc.net/problem/1655📝 풀이자료 구조 + 우선순위 큐접근법입력으로 들어오는 정수들에 대해 기록하고, 중간값을 N번 찾는 문제입력값 N은 최대 100,000으로 대략적인 시간복잡도는 O(NlogN)으로 잡고 풀어야 한다. 단순하게 생각했을 때, 입력을 받으면서 정렬을 계속 수행한 후 현재 개수/2의 인덱스를 구하면 되지만정렬의 시간복잡도는 O(NlonN)으로 입력값 N에 대해 최대 100,000번 수행한다고 하면 O(N^2)을 넘어서게 된다.그렇다면 어떻게 풀이를 해야할까? 매번 정렬을 수행할 수 없으니 정렬을 유지한 채 값을 기록하고, O(1)로 중간 값을 찾을 수 있어야 한다.자료구조 중 이러한 특성을 가지고 있는 자료구조가 있다.기본적인 정렬을 ..

image