Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 시간 복잡도
- ifnull
- 소수 판정
- 배열
- toUpperCase()
- 구현
- 스택
- 정렬
- 자료 구조
- IS NOT NULL
- 너비 우선 탐색
- 그리디 알고리즘
- toLowerCase()
- 브루트포스
- MySQL
- 그래프 탐색
- 연결 리스트
- 수학
- 백트래킹
- 거듭제곱
- 그래프 이론
- ListIterator
- 정수론
- 분할 정복
- 문자열
- 요세푸스 문제
- 큐
- 공간 복잡도
- 빅오 표기법
- BFS
Archives
- Today
- Total
배푸니까
[백준 / JAVA] 24444. 알고리즘 수업 - 너비 우선 탐색 1 본문
반응형
https://www.acmicpc.net/problem/24444
24444번: 알고리즘 수업 - 너비 우선 탐색 1
첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양방
www.acmicpc.net
💻 풀이 결과
💯 최종 코드
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int R = sc.nextInt();
int[] visited = new int[N + 1];
List<Integer>[] edge = new LinkedList[N + 1];
for (int i = 1; i <= N; i++) {
edge[i] = new LinkedList<>();
}
for (int i = 0; i < M; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
edge[u].add(v);
edge[v].add(u);
}
// 각 정점으로부터 연결된 간선 리스트를 오름차순 정렬
for (int i = 1; i < edge.length; i++) {
Collections.sort(edge[i]);
}
Queue<Integer> queue = new LinkedList<>();
int cnt = 0;
queue.add(R);
visited[R] = ++cnt;
while (!queue.isEmpty()) {
int curr = queue.poll();
// 다음 정점들 큐에 넣기
for (int i : edge[curr]) {
if (visited[i] == 0) {
queue.add(i);
visited[i] = ++cnt;
}
}
} // while문 끝
// 출력
for (int i = 1; i < visited.length; i++) {
System.out.println(visited[i]);
}
}
}
💬 풀이 과정
- 각 정점에 연결된 간선들을 입력받아 간선 집합에 넣을 때, 양방향임을 생각해서 두 정점의 배열에 기록
- 방문 순서를 저장할 visited 배열을 생성
💡 깨달은 점
1. BFS의 기본 구조
- 너비를 우선으로 방문하는 알고리즘
2. Collections.sort(리스트명)
- 리스트를 오름차순 정렬하고 싶을 때 사용
3. 자료 구조 List<Integer>[]
- 정수형 값을 저장할 연결리스트 자료형의 배열이라는 자료구조를 생성
반응형
'백준' 카테고리의 다른 글
[백준 / JAVA] 2178. 미로 탐색 (1) | 2023.08.02 |
---|---|
[백준 / JAVA] 24445. 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2023.08.01 |
[백준 / JAVA] 10799. 쇠막대기 (0) | 2023.07.10 |
[백준 / JAVA] 2504. 괄호의 값 (0) | 2023.07.10 |
[백준 / JAVA] 2164. 카드2 (0) | 2023.06.30 |