티스토리 뷰

PS

[Swift] 백준_N과 M(10)(15664)

희철 2023. 1. 18. 15:21

문제

 

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

 

15664번: N과 M (10)

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

www.acmicpc.net

 

 

풀이

 

N과 M(9)를 풀었다면 쉽게 해결할 수 있는 문제였다.

 

똑같이 중복되면 안되는 것을 생각해서 last라는 변수를 함수 내에 선언하고 dfs함수를 돌고 난 이후에 last값이 바뀌도록 하였다.

이 문제에서는 주어진 배열에서 현재 수보다 큰 인덱스를 가진 수만 표현하면 되므로 check같이 방문을 표시할 변수는 필요없다.

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let numbers = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted(by: <)

func dfs(_ current: String, _ depth: Int, _ idx: Int) {
    var last = 0
    if depth == input[1] {
        print(current)
        return
    }
    for i in idx..<input[0] {
        if last != numbers[i] {
            dfs(current + "\(numbers[i]) ", depth + 1, i + 1)
            last = numbers[i]
        }
    }
}
dfs("",0,0)

 

 

_____________________________________________________________________________________________________

 

 

9번을 좀 더 수월하게 해결했으면 좋았을듯

'PS' 카테고리의 다른 글

[Swift] 백준_N과 M(12)(15666)  (0) 2023.01.18
[Swift] 백준_N과 M(11)(15665)  (0) 2023.01.18
[Swift] 백준_N과 M(9)(15663)  (0) 2023.01.18
[Swift] 백준_N과 M(8)(15657)  (0) 2023.01.17
[Swift] 백준_N과 M(7)(15656)  (0) 2023.01.17
댓글
최근에 올라온 글
Total
Today
Yesterday