diff --git a/javascript/source/24480/indexism/indexism1.js b/javascript/source/24480/indexism/indexism1.js new file mode 100644 index 0000000..bb839b4 --- /dev/null +++ b/javascript/source/24480/indexism/indexism1.js @@ -0,0 +1,39 @@ +/** + * Q. + * 어떤 마을에 N개의 집(1번부터 N번까지 번호가 있음) 이 있다. + * 당신은 특정한 순서대로 집을 방문할 것이다. + * 각 집을 방문할 때 방문한 순서를 기록하는 배열을 만들어라. + * 방문하지 않은 집은 0으로 표시해야 한다. + * + * 입력 예제 + * 5 + * 3 1 4 + * + * 출력 예제 + * 2 0 1 3 0 + * + * 입력 예제 + * 7 + * 5 3 7 1 + * + * 출력 예제 + * 4 0 2 0 1 0 3 + */ + +let input = `5 +3 1 4`.split("\n"); +let N = Number(input.shift()); +//불필요한 중첩 배열 +// let graph = input.map((el) => el.split(" ").map(Number)); +let graph = input[0].split(" ").map(Number); +console.log(graph); + +let result = new Array(N).fill(0); +let count = 1; + +for (let i = 0; i < graph.length; i++) { + const visited = graph[i]; + result[visited - 1] = count++; +} + +console.log(result.join(" ")); diff --git a/javascript/source/24480/printer.js b/javascript/source/24480/printer.js new file mode 100644 index 0000000..f803208 --- /dev/null +++ b/javascript/source/24480/printer.js @@ -0,0 +1,45 @@ +let path = require("path"); +let inputPath = path.join(__dirname, "../dev/stdin"); // __dirname은 현재 스크립트의 디렉토리 절대경로 +let input = require("fs").readFileSync(inputPath).toString().trim().split("\n"); +//let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); //백준 제출 +// 정점 수 N, 간선 수 M, 시작 정점 R +let [N, M, R] = input.shift().split(" ").map(Number); + +// 그래프를 인접 리스트로 생성 +let graph = Array.from({ length: N + 1 }, () => []); +input.forEach((line) => { + let [u, v] = line.split(" ").map(Number); + graph[u].push(v); + graph[v].push(u); // 양방향 그래프이므로 반대 방향도 추가 +}); + +// **내림차순**으로 방문하기 위해 정렬 +for (let i = 1; i <= N; i++) { + graph[i].sort((a, b) => b - a); +} + +console.log(graph); +// 방문 배열 & 방문 순서 저장 배열 +let visited = new Array(N + 1).fill(false); +let order = new Array(N + 1).fill(0); +let count = 1; + +// **DFS 탐색을 재귀 방식으로 구현** +const dfs = (node) => { + visited[node] = true; + order[node] = count++; // 방문 순서 기록 + + for (let i = 0; i < graph[node].length; i++) { + let nextNode = graph[node][i]; + console.log(nextNode); + if (!visited[nextNode]) { + dfs(nextNode); + } + } +}; + +// DFS 시작 +dfs(R); + +// 문제 요구사항에 맞게 출력 +console.log(order.slice(1).join("\n")); diff --git a/javascript/source/dev/stdin b/javascript/source/dev/stdin index 624655d..1811c5b 100644 --- a/javascript/source/dev/stdin +++ b/javascript/source/dev/stdin @@ -1,4 +1,6 @@ -3 -1 1 10 -1 5 1 -2 2 -1 \ No newline at end of file +5 5 1 +1 4 +1 2 +2 3 +2 4 +3 4 diff --git a/package.json b/package.json index 25967dd..d79a5cf 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "name": "your-project-name", "version": "1.0.0", "scripts": { - "dev": "node javascript/source/16173/printer.js", + "dev": "node javascript/source/24480/printer.js", + "dev:test": "node javascript/source/24480/indexism/indexism1.js", "devtest": "node javascript/source/test.js" }, "author": "Your Name",