728x90
소스코드
let fs = require('fs');
const filePath = process.platform === "linux" ? `/dev/stdin` : `예제.txt`;
let input = fs.readFileSync(filePath).toString().trim().split(' ');
const c = console.log
let lst = []
for (let i=0 ; i < input.length ; i++){
lst.push(Number(input[i]))
}
n = lst[0]
m = lst[1]
let visited = []
for(let i = 0 ; i< n+1 ; i++){
visited[i] = false
}
let output = []
let result = ''
dfs = (count) => {
if (count === m+1) {
result += `${output.join(' ')}\n`
c(visited)
}
for (let i = 1; i < n+1 ; i++) {
c(count , i)
c(output)
if (visited[i] === true) continue
else{
visited[i] = true
output.push(i)
dfs(count+1)
output.pop()
visited[i] = false
}
}
}
dfs(1)
c(result.trim())
풀이
visited 라는 배열을 생성한 후 순회를 하면 true로 변경해주면서 재귀를 통해 입력값과 배열의 길이가 같아질때마다 문자열을 추가시켜 출력하게 해주었습니다.
dfs라는 함수를 실행할때 계속해서 dfs를 재귀해주는 방식인데, 모든 visited 테이블이 true가 되면 continue 를 통해 재귀가 끝나게 되고 pop을 통해 배열을 뺀 후 visited를 false로 변경해주게 됩니다.
문제
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
728x90
'BOJ > 백트래킹' 카테고리의 다른 글
BOJ : 9663 N-Queen (JS) (0) | 2022.12.26 |
---|---|
BOJ : 15652 n과m (4) (JS) (0) | 2022.12.25 |
BOJ : 15651 n과m(3) (JS) (0) | 2022.12.25 |
BOJ : 15650 n과m(2) (JS) (2) | 2022.12.24 |