-
[백준] 0927 오늘의 문제 풀이📚Algorithm 2020. 9. 27. 03:36반응형
대망의 백트래킹 문제를 풀어봤다..
일단 뭔가 백트래킹도 기초 문제를 보니
어느 정도 정해진 틀을 지켜가면서 응용이 될 것 같은 느낌.
일단 기초 문제들을 열심히 풀면서(풀이를 보면서 ㅎㅎ;) 기본 틀이 되는 코드를 좀 체화시켜야겠다.
1. N과 M (1)
a. 풀이 1
var input = []; const readline = require('readline'); const fs = require('fs'); const r = readline.createInterface({ input: process.stdin }); r.on('line', function(line) { input.push(line.trim()); }); r.on('close', function() { const line = input[0].split(' '); const N = +line[0]; const M = +line[1]; const arr = new Array(M).fill(0); const isUsed = new Array(N).fill(0); function backtracking(k) { if(k === M) { let str = ""; for(let i = 0; i < M; i++) { str += `${arr[i]} `; } console.log(str); return; } for(let i = 0; i < N; i++) { if(!isUsed[i]) { arr[k] = i + 1; isUsed[i] = 1; backtracking(k + 1); isUsed[i] = 0; } } } backtracking(0); });
b. 풀이 2
var input = []; const readline = require('readline'); const fs = require('fs'); const r = readline.createInterface({ input: process.stdin }); r.on('line', function(line) { input.push(line.trim()); }); r.on('close', function() { const line = input[0].split(' '); const N = +line[0]; const M = +line[1]; const arr = []; const isUsed = new Array(N).fill(0); function backtracking(k) { if(k === M) { console.log(arr.join(' ')); return; } for(let i = 0; i < N; i++) { if(!isUsed[i]) { isUsed[i] = 1; arr.push(i + 1); backtracking(k + 1); arr.pop(); isUsed[i] = 0; } } } backtracking(0); });
첫 번째 풀이는 선택한 원소들을 그냥 배열에 담았다.
두 번째 풀이는 선택한 원소들을 스택에 push & pop 해주면서
DFS와 동일한 방식으로 백트래킹을 하는 듯.
사실 배열, 스택만 다르고 둘다 DFS 방식인 것 같기도 하다.
그리고 출력하는 방식도 join을 이용해서 한 번에 출력했는데, 약간 더 빠르게 나왔다.
스택 때문인건가 join 때문인건가
반응형'Algorithm' 카테고리의 다른 글
[프로그래머스] 1106 오늘의 문제 풀이 (0) 2020.11.06 [백준] 0926 오늘의 문제 풀이📚 (0) 2020.09.26 [백준] 0925 오늘의 문제 풀이📚 (0) 2020.09.26 [백준] 0924 오늘의 문제 풀이📚 (0) 2020.09.25 [백준] 0923 오늘의 문제 풀이📚 (0) 2020.09.25