총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2:
5화
“아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
회차
-
[JAVA][BOJ 1197] MST: 최소 스패닝 트리0515분문제링크문제 파악최소 스패닝 트리: 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리사이클을 포함하면 가중치의 합이 최소가 될 수 없으므로 사이클을 포함하지 않는다.N개의 노드가 있으면 최소 스패닝 트리를 구성하는 엣지의 개수는 항상 N-1개다.정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000), 가중치는 음수일 수도 있으며 절댓값이 1,000,000을 넘지 않는다.최소 스패닝 트리의 가중치는 -2,147,483,648보다 크거나 같고, 2,147,483,647보다 작거나 같은 데이터만 입력으로 주어진다.접근 방법크루스칼 알고리즘: 엣지 리스트 pq(노드1, 노드2, 가중치), 사이클 확인용 UNION-FINDclass Pa..
-
[JAVA][BOJ 1911] 흙길 보수하기 - 그리디 pq0424분[Gold V] 흙길 보수하기 - 1911문제 링크성능 요약 메모리: 39344 KB, 시간: 448 ms분류 그리디 알고리즘, 정렬, 스위핑문제 설명어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N(1 ≤ N ≤ 10,000)개의 물웅덩이가 생겼다. 월드학원은 물웅덩이를 덮을 수 있는 길이가 L(1 ≤ L ≤ 1,000,000)인 널빤지들을 충분히 가지고 있어서, 이들로 다리를 만들어 물웅덩이들을 모두 덮으려고 한다. 물웅덩이들의 위치와 크기에 대한 정보가 주어질 때, 모든 물웅덩이들을 덮기 위해 필요한 널빤지들의 최소 개수를 구하여라.입력첫째 줄에 두 정수 N과 L이 들어온다.둘째 줄부터 N+1번째 줄까지 총 N개의 줄에 각각의 웅덩이들의 정보가 주어진다. ..
-
[BOJ 2178][JAVA] 공백없이 입력된 문자 하나씩 받아올때0416분문제 2178 문제링크 N×M크기의 배열로 표현되는 미로가 있다.101111101010101011111011미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다.입력첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.출력첫째 줄에 지나..
-
[BOJ 10552][JAVA] 박싱/언박싱0415분[Silver II] DOM - 10552문제 링크성능 요약 메모리: 178132 KB, 시간: 1000 ms분류 너비 우선 탐색, 깊이 우선 탐색, 그래프 이론, 그래프 탐색제출 일자 2025년 4월 15일 12:16:15문제 설명In a retirement home, N senior citizens are watching television. The television programme consists of M channels denoted with numbers from 1 to M. Each of the pensioners has their own favourite and hated TV channel.If the television is currently displaying the hated c..
-
[JAVA] 백준할 때마다 헷갈리는 자바 기본 / 자료형과 연산자, 출력 문법 정리0415분보호되어 있는 글입니다.
-
[Contiguous data structures] List1020분basicsC++ 을 사용하기에 앞서 C++을 사용한 Object Oriented Programming이 어떤 것이고 쓰면 뭐가 좋은지 살펴본다.OOP는 data 와 operation(method)를 하나로 묶어서 구조체 형태로 사용하는데 이를 ADT라고 한다. 학생 데이터 베이스에 학생 정보만 있는게 아니라 학생 정보를 관리할 동작(추가, 삭제 등)을 하나로 보는 것이다.ADT(Abstract Data Type)어떻게 해야 사용할 수 있을 지가 아니라 어떤 기능을 사용할 수 있을 지 알려주기 위한 구조Tell what the program must do, but not howInformation hidingpublic interfaces/methods만을 통해 데이터에 접근할 수 있으므로 접근 제어 가..
-
[Linked List] Queue1016분QueueFisrt In First Outthe other end (the front) ㅁ ㅁ ㅁ ㅁ ㅁ one end(the rear) 방향 진짜 중요하다 무조건 왼쪽으로 ~~ !!enqueue, dequeue 모두 rear와 front를 가리키는 인덱스를 +1 해 item을 넣고 빼게 된다.이때, rear idx가 [max]인 경우 front idx 부터 할당된 어레이까지 공간이 남아도 더 이상 enqueue가 되지 않는다는 한계가 있다.Circular Queue어레이를 동그랗게 이어서 여분 공간을 사용할 수 있도록 한다.dequeue : 값을 내보내고 front = front + 1 한다. enqueue: rear = rear + 1 에 넣는다.보다시피 Empty, Full 모두 front ==..
-
[백준 12865][dp] 배낭: knapsack0630분드디어 기대하고 기대하던 배낭문제다. 이 문제를 만나고 나서야 DP의 의미를 이해할 수 있게 되었다. DP는 a, b, c, d가 있을 때 abc, abd, acd ... 이런 조합을 만드는 문제가 아니었다.a를 넣었을 때와 넣지 않았을 때 두 개로 나뉜 경우에 대해 각각이 b를 넣었을 때와 넣지 않았을 때로 나누는 방식으로 풀었어야 했다. 헐랭~ https://youtu.be/rhda6lR5kyQ?si=wVKtxIhe4A9wsj81DP는 초깃값 설정이 중요하다. 우리가 구하고자 하는 값은 가치의 최댓값이고, 입력값은 항목의 개수와 각 항목당 무게와 가치가 주어진다. dp의 data는 value 의 sum이다. 가질 수 있는 value의 최대값을 구하는 문제이므로 n 번째 항목까지의 value sum을 ..
-
[프로그래머스][dp] 땅따먹기0626분프로그래머스 알고리즘 강좌가 dp 이해에 도움이 됐다는 글을 보고 '땅따먹기'를 시도했다. 직접 짜보고 dp 코드와 비교하니까 dp의 느낌이 확 와닿는다. dp는 모든 경우의 수를 확인하는데, 각 요소가 있고, 없고에 따라 경우를 만든다. 문제와 함께 보자 문제ㅎ. 하지만 나는 어제 dp를 정리해 놓고도 전혀 떠오르지 않아서 풀리는 대로 풀었다. (이해가 덜 됐다ㅜ)내 풀이 방법1. 현재 index(j)를 이전 max의 index와 비교해 같지 않은 경우에만 들어간다. - if ( i == 0 ) 인 예외를 주는 데 시간이 오래 걸렸다. 다시 생각해 보니 첫 열은 index가 뭐든 관계없으니까 preindex 처음 선언할 때 preindex = -1; 했으면 됐겠다. 2. index가 같지 않은 경우..
Algorithm/Tree
[JAVA][BOJ 1197] MST: 최소 스패닝 트리
728x90
반응형
문제 파악
최소 스패닝 트리: 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리
- 사이클을 포함하면 가중치의 합이 최소가 될 수 없으므로 사이클을 포함하지 않는다.
- N개의 노드가 있으면 최소 스패닝 트리를 구성하는 엣지의 개수는 항상 N-1개다.
정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000), 가중치는 음수일 수도 있으며 절댓값이 1,000,000을 넘지 않는다.
최소 스패닝 트리의 가중치는 -2,147,483,648보다 크거나 같고, 2,147,483,647보다 작거나 같은 데이터만 입력으로 주어진다.
접근 방법
크루스칼 알고리즘: 엣지 리스트 pq(노드1, 노드2, 가중치), 사이클 확인용 UNION-FIND
class Pair
node 1, node 2, weight
// 가중치가 작은 순으로 엣지 리스트 정렬
@Overrride
public int compare(Pair x.weight, Pair y.weight)
// edge list
List<Pair> = new ArrayList<>();
또는 pq 사용
// 사이클 존재 확인: union find
boolean find()
union() if find로 찾은 루트가 같다면 return 0;
while ( int 엣지를 더한 횟수 <= V - 1)
미사용 에지 중 가중치가 작은 에지 선택 -> pq.poll()
if (find 로 사이클 유무 확인) {
continue;
}
union();
엣지 ++ ;
코드 구현
import java.util.*;
public class Main {
public static class Edge implements Comparable<Edge> {
int s; int e; int v;
public Edge(int s, int e, int v) {
this.s = s; this.e = e; this.v = v;
}
@Override
public int compareTo(Edge o) {
return this.v - o.v;
}
}
static PriorityQueue<Edge> pq = new PriorityQueue<>();
static int[] parent;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
pq = new PriorityQueue<>();
for (int i = 0; i < m; i++) {
int s = sc.nextInt();
int e = sc.nextInt();
int v = sc.nextInt();
pq.add(new Edge(s, e, v));
}
parent = new int[n+1];
for (int i = 0; i <= n; i++) {
parent[i] = i;
}
int cnt = 0;
int ans = 0;
while ( cnt < n-1) {
Edge cur = pq.poll();
if (union(cur.s, cur.e)){
ans += cur.v;
cnt++;
}
}
System.out.println(ans);
}
public static boolean union(int a, int b) {
a = find(a);
b = find(b);
if (a != b) {
parent[b] = a;
return true;
}
return false;
}
public static int find(int x) {
if (x == parent[x]) return x;
return parent[x] = find(parent[x]);
}
}
배우게 된 점
범위: while( cnt <= n-1 ) 때문에 nullPointer 에러가 났다.
내부에서 cnt ++ 하기 때문에 `< n-1` 주의하자
728x90
'Algorithm > Tree' 카테고리의 다른 글
트리 계산을 위한 배열(인덱스) 표현 (3) | 2025.05.30 |
---|
2025:05:15
Algorithm/Tree
[JAVA][BOJ 1197] MST: 최소 스패닝 트리