05:04
N๊ณผ M ์๋ฆฌ์ฆ๋ฅผ ์ฐจ๋ก๋๋ก ์ญ์ฑ ํ๋ฉด์ ์ ์ ์ ๋ต ๋น์จ์ด ๋์์ง๊ธธ๋ ์ ๊ทธ๋ฐ๊ฐ ํ๋๋, ์ฌ๋๋ค์ด ์๋ฆฌ์ฆ ์์๋๋ก ํ๋ฉด์ ์ ํ์ ํ์
ํด์ ์ ๋ต์จ์ด ๋์๋ค๋ ๊ฑธ ์์๋ค. ์๋๋ฉด ๋ด๊ฐ ์ง๊ธ ๊ทธ๋ฌ๊ณ ์๊ธฐ ๋๋ฌธ์โฆ. ์ด์ ์ฝ๊ฐ ๋ฐฑํธ๋ํน์ ๊ฐ์ด ์กํ๋ค.
๋ฌธ์
https://www.acmicpc.net/problem/15657
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift
let input = readLine()!.split(separator: " ").map { Int(String($0))! } let n = input[0] let m = input[1] let nums = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted() var picked = [String]() var result = "" /* n: ์ ์ฒด ์์์ ์ toPick: ๊ณ ๋ฅผ ์ ์๋ ์์์ ์ */ func pick(n: Int, toPick: Int) { // ๊ธฐ์ ์ฌ๋ก: ๊ณ ๋ฅผ ์ ์๋ ์์์ ์๊ฐ ์์ผ๋ฉด ์ถ๋ ฅํ๊ณ ์ข
๋ฃ if toPick == 0 { result += picked.joined(separator: " ") + "\n" return } // ์๋ฅผ ๊ณ ๋ฅธ๋ค. ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค. for i in 0..<n { if let last = picked.last { // ๋น๋ด๋ฆผ์ฐจ์ ํ์ธ if Int(last)! > nums[i] { continue } } picked.append(String(nums[i])) pick(n: n, toPick: toPick - 1) picked.removeLast() } } pick(n: n, toPick: m) print(result, terminator: "")
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.