Study(진행중)/항해99
99클럽 코테 스터디 24일차 TIL / 가장 먼 노드(프로그래머스)
Ski_
2024. 8. 15. 01:00
오늘의 학습 키워드
- 알고리즘
- 그래프 탐색
- 너비 우선 탐색
공부한 내용 본인의 언어로 정리하기
https://school.programmers.co.kr/learn/courses/30/lessons/49189
BFS를 활용한 문제를 풀었다.
풀이 과정은 다음과 같다.
1. visit 배열을 boolean이 아닌 int 값으로 선언
2. bfs 로직을 돌며 방문 처리를 이전 방문 거리 + 1로 visit 배열에 할당
3. 마지막에 반복문을 돌며 가장 먼 노드가 몇 개인지 카운트
풀이는 다음과 같다.
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
ArrayList<Integer>[] graph = new ArrayList[n + 1];
for (int i = 1; i <= n; i++) graph[i] = new ArrayList<>();
for (int[] line : edge) {
graph[line[0]].add(line[1]);
graph[line[1]].add(line[0]);
}
int[] visit = new int[n + 1];
visit[1] = 1;
Deque<Integer> que = new ArrayDeque<>();
que.add(1);
while(!que.isEmpty()) {
int cur = que.pollFirst();
for (int next : graph[cur]) {
if (visit[next] != 0) continue;
visit[next] = visit[cur] + 1;
que.addLast(next);
}
}
int answer = 0;
int maxDist = 0;
for (int i = 1; i <= n; i++) {
if (visit[i] == maxDist) answer++;
else if (visit[i] > maxDist) {
answer = 1;
maxDist = visit[i];
}
}
return answer;
}
}
반응형