본문 바로가기

BOJ/백트래킹

BOJ : 15649 n과m(1) (JS)

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