|
1 |
| -let fs = require('fs'); |
2 |
| -let input = fs.readFileSync('/dev/stdin').toString().trim().split(' '); |
| 1 | +const fs = require('fs'); |
| 2 | +let input = fs.readFileSync('./dev/stdin.txt').toString().trim().split('\n'); |
3 | 3 |
|
4 |
| -let N = Number(input[0]); |
5 |
| -let arr = [null]; |
| 4 | +const N = Number(input[0]); |
| 5 | +const colorArr = []; |
| 6 | +const count = 0; |
| 7 | +let visitedArr = []; |
6 | 8 |
|
7 | 9 | for (let i = 1; i <= N; i++) {
|
8 |
| - arr.push(Number(input[i])); |
| 10 | + colorArr[i] = [,]; |
| 11 | + visitedArr[i] = new Array(N + 1).fill(false); |
| 12 | + colorArr[i].push(...input[i].split('')); |
9 | 13 | }
|
| 14 | +console.log(visitedArr); |
10 | 15 |
|
11 |
| -let visitedArr = new Array(N + 1).fill(false); |
12 |
| -let finishedArr = new Array(N + 1).fill(false); |
13 |
| -let cycleArr = []; |
14 |
| - |
15 |
| -const dfs = (idx) => { |
16 |
| - cycleArr.push(idx); |
17 |
| - |
18 |
| - let next = arr[idx]; |
19 |
| - |
20 |
| - if (visitedArr[next]) { |
21 |
| - if (!finishedArr[next]) { |
22 |
| - // 사이클 arr에 있는 idx들을 finishedArr에 삽입 |
23 |
| - return finishedArr; |
24 |
| - } else { |
25 |
| - return 0; |
26 |
| - } |
| 16 | +const dfs = (x, y) => { |
| 17 | + if (visitedArr[x][y]) { |
| 18 | + return false; |
27 | 19 | }
|
28 |
| - visitedArr[next] = true; |
29 |
| - |
30 |
| - dfs(next); |
31 |
| - visitedArr[idx] = false; |
32 |
| - // visitedArr 부분을 좀더 생각.. |
33 |
| - // startIdx도 생각해야함 |
| 20 | + visitedArr[x][y] = true; |
34 | 21 | };
|
35 | 22 |
|
36 | 23 | for (let i = 1; i <= N; i++) {
|
37 |
| - cycleArr = []; |
38 |
| - visitedArr[i] = true; |
39 |
| - dfs(i); |
| 24 | + for (let j = 1; j <= N; j++) { |
| 25 | + if (dfs(i, j)) { |
| 26 | + count++; |
| 27 | + } |
| 28 | + } |
40 | 29 | }
|
41 | 30 |
|
42 |
| -// 개수가 최대일 경우의 수, output = 뽑힌 정수들의 개수, 작은수부터 큰수 순서로 |
43 |
| -// 단순히 생각하면 뽑힌 인덱스와 그 값의 배열이 일치하면 되는데 => 텀 프로젝트 문제에서 이렇게 했다가 메모리 초과 났음(즉, 효율적인 방식이 아님) |
| 31 | +console.log(count); |
44 | 32 |
|
45 |
| -// target 인덱스로 사이클을 형성한다고 생각할 수 있을 것 같음 |
46 |
| -// 자기 자신을 가르키는 경우 또한 포함됨 |
| 33 | +// 빨, 파, 초 |
| 34 | +// 빨초, 파 |
| 35 | +// 모든 좌표에 대해 DFS 실행 |
| 36 | +// 상하좌우에 같은 문자열이 있는지 확인하는 로직 |
| 37 | +// visited |
0 commit comments