티스토리 뷰

PS

[Swift] 백준_N과 M(4)(15652)

희철 2023. 1. 17. 13:31

문제

 

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

 

15652번: N과 M (4)

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

www.acmicpc.net

 

 

풀이

 

이 문제에서도 이전 문제와 같이 depth를 이용해 숫자의 개수를 count하여 출력하는 것은 동일하다(파라미터로 문자열을 받기 때문에).

 

다만, 이번 문제처럼 현재 숫자를 기준으로 이후의 숫자만 받아오기 위해서는 추가적인 파라미터가 필요하다고 생각했다.

그래서 num이라는 파라미터에 반복문의 i를 받아오도록 하였다.

 

[4,2]의 경우에서 dfs("",0,1)로 시작하면 dfs("1 ",1,1), dfs("2 ",1,2), dfs("3 ",1,3), dfs("4 ",1,4)가 각각 실행될 것이다. 하지만 dfs이므로 하나의 경우에 대해서 깊이를 우선으로 탐색할 것이다. 그래서 각각의 경우에 대해 num부터 input[0]까지 출력하게되면 예시의 답처럼 출력이 된다.

import Foundation

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

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

 

 

_____________________________________________________________________________________________________

 

 

파라미터를 하나 더 받아야한다는 생각이 완전 바로 들지는 않았다. 머리이슈

'PS' 카테고리의 다른 글

[Swift] 백준_N과 M(6)(15655)  (0) 2023.01.17
[Swift] 백준_N과 M(5)(15654)  (0) 2023.01.17
[Swift] 백준_N과 M(3)(15651)  (2) 2023.01.17
[Swift] 백준_N과 M(2)(15650)  (0) 2023.01.17
[Swift] 백준_N과 M(1)(15649)  (0) 2023.01.16
댓글
최근에 올라온 글
Total
Today
Yesterday