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
- 후위 표기법
- fragment identifier
- 튜플
- 순열
- 완전탐색
- 알고리즘
- Dynamic Programming
- 점프와 순간이동
- 반복문
- 쿼드압축 후 개수세기
- HashSet
- 조합
- 보이어무어
- 문자열
- dfs
- 에라토스테네스의 체
- 어려웠던 문제
- HashMap
- 규칙찾기
- 2017 카카오 코드
- Java
- Stack
- 최소공배수
- python
- 영문자 확인
- 완전 탐색
- 메뉴리뉴얼
- pandas
- 프로그래머스
- 동적계획법
Archives
- Today
- Total
csmoon1010의 SW 블로그
[200425] 그래프 - 가장 먼 노드(level3) 본문
1. 문제이해
- n개의 노드, edge 정보 배열 --> 1번 노드로부터 가장 먼 노드 몇 개?
- 1번 노드와의 최단 거리구한 후 이 중 최대값 선택 --> 이 최대값을 가지는 노드의 개수
2. 전략
① edgeMap(HashMap<Integer, ArrayList<Integer>>) : 각 노드별 연결된 노드(일종의 인접리스트)
② resultMap(HashMap<Integer, Integer>) : 도달한 노드의 index와 거리 정보
③ BFS : resultMap에 모든 노드가 들어갈 때까지 BFS!!
- **BFS이므로 Queue를 이용한다. 시작노드 선정 기준
- resultMap에 없는 경우만 put해준다. 이 때 max값 함께 갱신.
④ resultMap에서 max와 같은 값을 가진 노드의 개수 출력
3. 참고사항
BFS(Breadth First Search) : 너비 우선 탐색
- 큐를 이용하여 그 다음 탐색할 노드를 선정한다.
- 인접행렬 혹은 인접리스트를 가지고 탐색
- 방문 여부를 기록하는 boolean[] 배열을 이용.(이 문제에서는 resultMap)
- 모든 노드를 탐색하는 경우라면 큐가 빌 때까지 반복한다.
4. 코드
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
int answer = 0;
//노드 - 연결된 노드들 리스트
HashMap<Integer, ArrayList<Integer>> edgeMap = new HashMap<>();
for(int i = 1; i <= n; i++){
edgeMap.put(i, new ArrayList<Integer>());
}
for(int i = 0; i < edge.length; i++){
edgeMap.get(edge[i][0]).add(edge[i][1]);
edgeMap.get(edge[i][1]).add(edge[i][0]);
}
int max = 0;
HashMap<Integer, Integer> resultMap = new HashMap<>(); //도달한 노드
//BFS로 SEARCH!!! - 큐 이용
Queue<Integer> q = new LinkedList<>();
q.add(1); resultMap.put(1, 0);
while(resultMap.size() < n){
int target = q.poll();
for(int e : edgeMap.get(target)){
if(!resultMap.containsKey(e)){
resultMap.put(e, resultMap.get(target)+1);
q.add(e);
if(max < resultMap.get(target) + 1) max = resultMap.get(target) + 1;
}
}
}
for(int key : resultMap.keySet()){
if(resultMap.get(key) == max) answer++;
}
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[200507] 크레인 인형뽑기 게임 - 2019카카오인턴(level1) (0) | 2020.05.07 |
---|---|
[200425] 깊이/너비우선탐색(DFS, BFS) - 단어변환(level3) (0) | 2020.04.25 |
[200424] 이분탐색(Binary Search) - 예산(level3) (0) | 2020.04.24 |
[200424] 동적계획법(Dynamic Programming) - 타일장식물(level3) (0) | 2020.04.24 |
[200424] 동적계획법(Dynamic Programming) - N으로 표현(level3) (0) | 2020.04.24 |
Comments