본문 바로가기
알고리즘

[Swift 알고리즘] 백준 6603_로또

by 마라민초닭발로제 2023. 4. 3.

 

 

https://www.acmicpc.net/problem/6603

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

 

 

 

 

 

해결 방법

DFS

재귀 형식으로 Visited노드를 통헤서 접근. recur이란 함수를 돌 때 Visited 노드의 개수가 6일때 print함수를 통해서 출력.

 

func sol3() {
    var visitedArr:[Int] = []
    func recurc(_ funcArr:[Int]) {
        if visitedArr.count == 6 {
            print(visitedArr.map{String($0)}.joined(separator: " "))
            _ = visitedArr.popLast()
            return
        }
        
        var tempArr = funcArr
        for _ in tempArr {
            let node = tempArr.removeFirst()
            visitedArr.append(node)
            recurc(tempArr)
        }
        _ = visitedArr.popLast()
    }
    while true {
        var inputArr = readLine()!.split(separator: " ").map{Int($0)!}
        let k:Int = inputArr.removeFirst()
        if k == 0 { return }
        recurc(inputArr)
        print("")
    }
    
}
sol3()