티스토리 뷰

PS

[Swift] 백준_N과 M(12)(15666)

희철 2023. 1. 18. 16:49

문제

 

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

 

15666번: N과 M (12)

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

www.acmicpc.net

 

 

풀이

 

역시나 9번만 해결했다면 쉽게 해결할 수 있는 문제였다.

 

예시를 보면 자기자신부터 이후의 숫자들과의 쌍을 출력해야한다. 마찬가지로 중복은 없어야한다.

따라서 자기자신의 인덱스를 알아야 그 이후를 알 수 있기때문에 idx라는 파라미터를 같이 받아준 뒤, 반복문을 idx부터 시작하도록 하면된다.

 

이전에는 자신이 포함되면 안되므로 dfs(current + "\(numbers[i]) ", depth + 1, i + 1)로 dfs를 호출했지만, idx가 자신도 포함시켜야하므로 idx파라미터에 i + 1이 아닌 i를 넣어준다.

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)
            last = numbers[i]
        }
    }
}
dfs("",0,0)

 

 

_____________________________________________________________________________________________________

 

 

N과 M시리즈를 다풀었따. 기본적인 느낌은 알 것 같은데 다른 문제들도 풀어봐야 할 것 같다.

'PS' 카테고리의 다른 글

[Swift] 백준_스타트와 링크(14889)  (0) 2023.01.20
[Swift] 백준_N-Queen(9663)  (0) 2023.01.20
[Swift] 백준_N과 M(11)(15665)  (0) 2023.01.18
[Swift] 백준_N과 M(10)(15664)  (0) 2023.01.18
[Swift] 백준_N과 M(9)(15663)  (0) 2023.01.18
댓글
최근에 올라온 글
Total
Today
Yesterday