diff --git a/week7/week7/doo_week7/doo_week7_1.js b/week7/week7/doo_week7/doo_week7_1.js new file mode 100644 index 0000000..613700b --- /dev/null +++ b/week7/week7/doo_week7/doo_week7_1.js @@ -0,0 +1,51 @@ +// 백준 7562 +// [입력] +// 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. +// 각 테스트 케이스는 세 줄로 이루어져 있다. +// 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. +// 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. +// 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다. + +// [출력] +// 각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다. + +const fs = require('fs'); +const INPUTFILE = process.platform === 'linux' ? '/dev/stdin' : 'week7/input.txt'; +const input = fs.readFileSync(INPUTFILE).toString().trim().split('\n'); + +const direction = [[1,2],[-1,2],[1,-2],[-1,-2],[2,1],[2,-1],[-2,1],[-2,-1]]; +let start,end,size,visited; + +// 최단길이 탐색이므로 bfs 사용 +const bfs = () => { + queue = [[start[0],start[1],0]]; + while(!!queue.length){ + const [x,y,move] = queue.shift(); + + if(x == end[0] && y == end[1]) return move; + + for(let i=0;i<8;i++){ + const next_x = x + direction[i][0]; + const next_y = y + direction[i][1]; + + if(next_x>=0 && next_x=0 && next_y { + const n = input.shift(); // 테스트케이스 개수 + for(let j=1;j<=n;j++){ + size = Number(input.shift()); + start = input.shift().split(' ').map(Number); + end = input.shift().split(' ').map(Number); + visited = Array.from(Array(size),()=>Array(size).fill(0)); + + console.log(bfs()); + } +} + +sol(); diff --git a/week7/week7/doo_week7/doo_week7_2.js b/week7/week7/doo_week7/doo_week7_2.js new file mode 100644 index 0000000..5a3748f --- /dev/null +++ b/week7/week7/doo_week7/doo_week7_2.js @@ -0,0 +1,64 @@ +// 백준 2667 +// [입력] +// 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, +// 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다. + +// [출력] +// 첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각 단지내 집의 수를 오름차순으로 정렬하여 한 줄에 하나씩 출력하시오. + +const fs = require('fs'); +const INPUTFILE = process.platform === 'linux' ? '/dev/stdin' : 'week7/input.txt'; +const input = fs.readFileSync(INPUTFILE).toString().trim().split('\n'); + +const N = Number(input.shift()); +const map = Array.from(Array(N), ()=>Array(N)); +const visited = Array.from(Array(N), ()=>Array(N).fill(0)); + +for(let i=0;i { + + // map범위 내, 방문X, 집 존재O + if( x>=0 && x=0 && y { + for(let x=0; xa-b); // 오름차순 정렬 + console.log(answer.length+'\n'+answer.join('\n')); // 총 단지수, 각 단지내 집의 수 +} + +sol();