[백준] N과 M (6) (15655)

문제 설명

백준 15655번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.

» 출력

  • 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다.

예제 입출력(테스트케이스)

입력 출력
3 1
4 5 2
2
4
5
4 2
9 8 7 1
1 7
1 8
1 9
7 8
7 9
8 9
4 4
1231 1232 1233 1234
1231 1232 1233 1234

문제 풀이(SWIFT) 1

//
//  main.swift
//  BOJ15655_SWIFT
//
//  Created by choiyoujun on 2022/02/23.
//

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let N = NM[0]
let M = NM[1]
let seq = readLine()!.split(separator: " ").map { Int($0)! }.sorted(by: <)
var check = [Bool](repeating: false, count: N)

func dfs(depth: Int, index: Int, str: String) {
    if depth == M {
        print(str)
        return
    }
    
    for i in index..<N {
        if !check[i] {
            check[i] = true
            dfs(depth: depth + 1, index: i + 1, str: str + "\(seq[i]) ")
            check[i] = false
        }
    }
}

dfs(depth: 0, index: 0, str: "")

태그:

카테고리:

업데이트: