백준 13023 ABCDE

bkboy·2022년 5월 30일
0

백준 초급

목록 보기
43/80

문제

제한 사항

입출력 예

풀이

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let [n,m] = input.shift().split(" ").map(Number);
let arr = [];
for(let x of input){
    arr.push(x.split(" ").map(Number));
}

const solution = (n, arr) => {
  const graph = Array.from(Array(n), () => []);
  const check = new Array(n).fill(0);
  let flag = 0;
  for (let [a, b] of arr) {
    graph[a].push(b);
    graph[b].push(a);
  }

  const dfs = (cur, cnt) => {
    check[cur] = 1;
    if (flag) return;
    if (cnt === 4) {
      flag = 1;
    } else {
      for (let next of graph[cur]) {
        if (!check[next]) {
          dfs(next, cnt + 1);
        }
      }
    }
    check[cur] = 0;
  };

  for (let i = 0; i < n; i++) {
    dfs(i, 0);
  }
  return flag;
};


console.log(solution(n, arr));
  • 서로 다른 노드끼리 연속적으로 4번 연결되면 조건을 만족한다.
  • 그래서 dfs의 조건문이 저런식으로 나왔다.
  • 인접행렬로 graph를 표현했을 때 시간초과가 나와서 인접리스트로 바꿨다.
profile
음악하는 개발자

0개의 댓글