반응형
반응형
풀이 방법 dfs를 통한 백트래킹 문제입니다. 코드는 아래와 같습니다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n"); const N = +input.shift(); const data = input.map((v) => v.split(" ").map(Number)); const eggsState = data.map((v) => v[0]); let answer = 0; dfs(0, eggsState); console.log(answer); function dfs(index, arr) { //순회를 마치면 탈출 if (index === N) { const count = arr.fil..
1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 문제풀이 방법 25명중 무작위로 7명을 뽑습니다. 7명중 4명 이상이 ‘이다솜파’라면 dfs함수를 실행합니다. dfs함수는 무작위로 뽑힌 7명이 인접한 자리에 앉아있는지 확인하는 함수입니다. dfs를 활용하여 인접한지 확인할 수 있습니다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n") .map((v) => v.split("")); let a..
https://www.acmicpc.net/problem/2573 Bfs함수를 따로 만들고, 시간이 한번 지날때 바뀌는 빙산의 모양을 만드는 nextYear함수를 따로 만들어서 공략했습니다. 함수를 따로 만들면 이해하기가 쉽습니다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n") const [N,M] = input.shift().split(" ").map(Number) let iceberg = input.map(v => v.split(" ").map(Number)) const next = [[1,0],[-1,0],[0,1],[0,-1]] let count = 0 while(true..
첫 번째 풀이 DFS + DP 풀이로 접근하면 해결되지 않을까 생각하고 풀었다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim() .split("\\n"); const T = +input.shift(); class Next{ constructor(){ this.obj = {} } push(X,Y){ if(this.obj[X] === undefined){ this.obj[X] = {before : [], after : []} } this.obj[X].after.push(Y) if(this.obj[Y] === undefined){ this.obj[Y] = {before : [], after : []} } th..
첫 번째 풀이 가장 많이 꼬인 전깃줄을 차례로 제거하면서 꼬인 줄이 없을 때 까지 반복한다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n") const N = +input.shift() let data = input.map(v => v.split(" ").map(Number)) let countArr = Array.from({length:N},(v,i)=>[i,[],0]) for(let i=0; i end2)){ countArr[i][1].push(j) countArr[i][2]++ } } } } let answer = 0; while(true){ const deleteIndex ..
첫 번째 풀이 단순하게 DFS로 풀었다. 이 문제의 경우 DFS로만 풀게되면 시간초과가 나게 되어있다. 시간초과가 나지 않게하기 위해 never라는 배열을 만들어 절대 가지 못하는 길을 체크했다. 그래도 여전히 시간초과가 남. 갈 수 있는 길을 방문 했을 경우 멈추는 것이 아니라 끝까지 방문하는 알고리즘이여서 그런 듯. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n") const [M,N] = input.shift().split(" ").map(Number) const data = input.map(v => v.split(" ").map(Number)) const arr = Arra..