[백준 9742] 순열

Junyoung Park·2022년 7월 8일
0

코딩테스트

목록 보기
499/631
post-thumbnail

1. 문제 설명

순열

2. 문제 분석

순열 문제. 백트래킹으로 풀 수 있는데, 마지막 입력값이 없을 때까지 제어하는 게 더 어려웠다.

3. 나의 풀이

import Foundation

while let input = readLine() {

    let output1 = String(input)
    let line = input.split(separator: " ")
    var word = Array(String(line[0])).map{String($0)}
    word.sort()
    let wordCnt = word.count
    let order = Int(String(line[1]))!
    var check = Array(repeating: false, count: wordCnt)
    var flag = false
    var cnt = 0
    
    func DFS(letters: [String]) -> Void {
        if letters.count == wordCnt {
            cnt += 1
            if cnt == order {
                flag = true
                let permutation = letters.joined()
                let output = output1 + " = " + permutation
                print(output)
            }
        }
        
        for idx in 0..<wordCnt {
            if !check[idx] {
                check[idx] = true
                DFS(letters: letters + [word[idx]])
                check[idx] = false
            }
        }
    }
    
    DFS(letters: [])
    if !flag {
        let output = output1 + " = " + "No permutation"
        print(output)
    }
}
profile
JUST DO IT

0개의 댓글