백준

[백준][Kotlin]15649번 N과 M (1)

끝까지 처음처럼 2023. 4. 5. 15:54
728x90

해당문제는 알고리즘 백트래킹으로 분류되어 있습니다.

백트래킹을 간단히 설명하자면 정답를 찾는중에 정답이 아니라면, 되돌아가서 다시 정답를 찾아가는 기법을 말합니다.

15649번 N과 M (1) 문제는 dfs를 이용하여 쉽게 구현 및 작성 할 수 있는 문제였습니다.

 

 하기는 제가 작성한 코드와 제출 결과 입니다.

 

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*

lateinit var visit : BooleanArray
lateinit var bw : BufferedWriter
var N = 0
var M = 0

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    bw = BufferedWriter(OutputStreamWriter(System.out))
    var st = StringTokenizer(br.readLine())

    N = st.nextToken().toInt()
    M = st.nextToken().toInt()

    visit = BooleanArray(N+1)

    for(i in 1 .. N){
        visit[i] = true
        dfs(i.toString(),1)
        visit[i] = false
    }

    bw.flush()
    bw.close()
}

fun dfs(num: String,count: Int){
    if(count == M){
        bw.appendLine(num)
        return
    }

    for(i in 1 .. N){
        if(visit[i])continue
        visit[i] = true
        dfs("$num $i",count+1)
        visit[i] = false
    }

}