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 |
Tags
- useRef 지역 변수
- 백준 node.js
- KDT 프로그래머스
- react customHook 예시
- 프로그래머스 데브코스 프론트엔드 TIL
- frontend roadmap study
- 백준 js
- 우테캠 회고록
- 리팩토링 회고
- 투포인터알고리즘 js
- 모던 자바스크립트 딥다이브
- react 프로젝트 리팩토링
- 모던 자바스크립트 TIL
- Vue3 Router
- K_Digital Training
- 개발자 특강
- TypeScript 문법 소개
- 모던 자바스크립트 Deep Dive
- 머쓱이
- 프로그래머스 데브코스
- Vue3
- useEffect return
- 모던 자바스크립트 Deep Dive TIL
- 프로그래머스 K_Digital Training
- 프로그래머스 데브코스 프론트엔드
- KDT 프로그래머스 데브코스 프론트엔드
- Frontend Roadmap
- 프로그래머스 K_Digital Training 프론트엔드
- 모던 javascript Deep Dive
- 인프런 자바스크립트 알고리즘 문제풀이
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[백준 node.js] 1260번_DFS와 BFS 본문
백준 DFS 알고리즘 1260번_DFS와 BFS
난이도 : 실버II
* DFS와 BFS 두개 다 요구하는 문제입니다.
문제 설명
입출력
문제 풀이 : 문제 제목부터 DFS와 BFS를 요구하는 문제이다.
기본 DFS와 BFS 구현 알고리즘을 이용해서 해결하면된다.
인접행렬 방식으로 풀어줘야한다는 것만 알고 풀면된다!
//실버2 DFS와 BFS
//DFS함수
function DFS(v) {
//노드 방문처리
visited[v] = true;
//출력을 위해 리스트에 노드 삽입
DFS_graph.push(v);
for (let i = 1; i < graph.length; i++) {
//graph에 1이 있고 방문하지 않았다면 재귀 호출
if (graph[v][i] === 1 && visited[i] === false) {
DFS(i);
}
}
}
//BFS함수
function BFS(v) {
let Queue = [];
//시작노드 큐에 삽입
Queue.push(v);
//시작 노드 방문처리
BFS_graph.push(v);
//큐에 값이 있을동안 계속 반복
while (Queue.length !== 0) {
//큐에서 하나를 빼서 그 노드 방문처리
let dequeue = Queue.shift();
visited2[dequeue] = true;
for (let i = 1; i < graph.length; i++) {
//큐에서 뺀 노드를 반복하면서 노드와 연결된
//다른 노드들 중 1이 있고 방문하지 않았다면
if (graph[dequeue][i] === 1 && visited2[i] === false) {
//연결 노드 방문처리 후 큐와 출력을 위한 배열에 삽입
visited2[i] = true;
Queue.push(i);
BFS_graph.push(i);
}
}
}
return;
}
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
//전역변수로 사용하는 것들
let graph = [];
let visited = [];
let visited2 = [];
let DFS_graph = [];
let BFS_graph = [];
rl.on("line", function (line) {
//여러줄 입력
input.push(line);
}).on("close", function () {
let [n, m, v] = input[0].split(" ").map((el) => parseInt(el));
input = input.slice(1);
graph = Array.from(Array(n + 1), () => Array(n + 1).fill(0));
//양방향 그래프로 입력 노드 위치에 1 대입
for (let i of input) {
let [x, y] = i.split(" ").map((el) => parseInt(el));
graph[x][y] = 1;
graph[y][x] = 1;
}
//DFS, BFS 각각 방문 처리를 위해 두개 사용
visited = new Array(n + 1).fill(false);
visited2 = new Array(n + 1).fill(false);
DFS(v);
BFS(v);
//DFS, BFS처리 후 출력
console.log(DFS_graph.join(" "));
console.log(BFS_graph.join(" "));
process.exit();
});
* 예제 입력3처럼 1000개의 노드가 주어지고 999, 1000의 연결 과정만 있을때는 어쩔수없이 1~1000까지 전체 순회하면서 탐색과정을 통해 DFS와 BFS를 거친다. 인접행렬 방식으로 풀어서 어쩔수없는거같다. 다른 사람들 코드를 한번 보고 다른방법이 있는지 봐야겠다
728x90
'알고리즘_JS > 백준_Graph(DFS,BFS)' 카테고리의 다른 글
[백준 node.js] 4963번_섬의 개수 (0) | 2021.01.06 |
---|---|
[백준 node.js] 1012번_유기농 배추 (0) | 2021.01.06 |
[백준 node.js] 11724번_연결 요소의 개수 (0) | 2021.01.05 |
[백준 node.js] 2599번_짝 정하기 (1) | 2021.01.03 |
[백준 node.js] 2606번_바이러스 (0) | 2021.01.03 |
Comments