일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- webpack
- dfs
- CI/CD
- RTK Query
- SSR
- Promise
- CORS
- 무한 스크롤
- React
- 결정 알고리즘
- map
- 태그된 유니온
- 리터럴 타입
- useAppDispatch
- recoil
- 반공변성
- 이분 검색
- 타입 좁히기
- 공변성
- TS
- app router
- 투포인터
- tailwind
- autosize
- Jest
- ESlint
- async/await
- 호이스팅
- Cypress
- 인터섹션
Archives
- Today
- Total
짧은코딩
가장 먼 노드(DFS) 본문
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/49189
코드
function solution(n, edge) {
const list = Array.from({ length: n + 1 }, () => []);
edge.map(([x, y]) => {
list[x].push(y);
list[y].push(x);
});
const dis = [Infinity, 1];
const queue = [1];
while (queue.length) {
const cur = queue.shift();
for (let next of list[cur]) {
if (!dis[next]) {
dis[next] = dis[cur] + 1;
queue.push(next);
}
}
}
dis.shift();
let count = 0;
const max = Math.max(...dis);
dis.map((len) => {
if (len === max) count++;
});
return count;
}
풀이 방법
이 문제는 DFS를 이용해서 푸는 방법이다. 처음에는 플로이드 알고리즘을 이용해서 풀었지만 예시만 맞고 틀렸다.
const list = Array.from({ length: n + 1 }, () => []);
edge.map(([x, y]) => {
list[x].push(y);
list[y].push(x);
});
list에 서로 연결되어 있는 노드를 정의해준다.
const dis = [Infinity, 1];
const queue = [1];
dis는 각 노드를 방문하는데 걸린 횟수를 저장한다. 맨 처음이 Infinity인 이유는 노드 번호가 1번부터 시작이라 이를 고려하기 위해서 임의로 넣어줬다.
queue에 노드들을 넣고 맨 앞 노드부터 방문하기 위한 리스트이다.
while (queue.length) {
const cur = queue.shift();
for (let next of list[cur]) {
if (!dis[next]) {
dis[next] = dis[cur] + 1;
queue.push(next);
}
}
}
반복문을 queue가 있을 때 까지 반복한다. cur은 현재 방문 중인 노드 번호를 의미한다.
for문에서 현재 노드와 연결된 노드를 방문한다. dis에 현재 노드와 연결된 노드가 없으면 현재 노드의 방문 횟수에서 +1해서 넣어주고 queue에 다음번에 방문할 노드를 넣어준다.
dis.shift();
let count = 0;
const max = Math.max(...dis);
dis.map((len) => {
if (len === max) count++;
});
return count;
dis.shift()를 하여 임시로 있던 Infinity를 제거해준다. 그리고 dis에서 가장 큰 숫자를 얻고 dis 안에 가장 큰 숫자 개수를 계산해 리턴해주면 된다.
반응형
'코딩테스트 with JS > 백준, 프로그래머스' 카테고리의 다른 글
JS) 표현 가능한 이진트리 (2) | 2023.12.01 |
---|---|
프로그래머스) 큰 수 만들기 (0) | 2023.11.12 |
프로그래머스) 광고 삽입 (0) | 2023.03.04 |
프로그래머스) 합승 택시 요금(플로이드-워셜) (0) | 2023.02.28 |
프로그래머스) 순위 검색(조합, 이진 탐색, Map vs Object) (1) | 2023.02.23 |
Comments