์ค๋ณต์์ด ๋ฐฉ๋ฌธ ํด์ผํ๋ค๋ ์ ์์ N๊ณผ M (1)๊ณผ ๋์ผํ๊ฒ visited
๋ณ์๋ฅผ ์ด์ฉํด์ ์ฒดํฌํ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ฌธ์ ๋ ์์ฐจ์ ์ธ ์ซ์์ ์กฐํฉ์ ๊ตฌํ๋ ๊ฒ์ด ์๋๋ผ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ซ์๋ค์ ์กฐํฉ์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด ๋์ ๋์
๋๋ฆฌ๋ฅผ ์ด์ฉํด ํ์๋ค.
๋ฌธ์
https://www.acmicpc.net/problem/15654
๋ด๊ฐ ์์ฑํ ์ฝ๋
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 visited = [Int: Bool]() for num in nums { visited[num] = false } /* n: ์ ์ฒด ์์์ ์ picked: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค์ ๋ฒํธ toPick: ๋ ๊ณ ๋ฅผ ์์์ ์ ์ผ ๋, ์์ผ๋ก toPick๊ฐ์ ์์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค */ func pick(n: Int, toPick: Int) { // ๊ธฐ์ ์ฌ๋ก: ๋ ๊ณ ๋ฅผ ์์๊ฐ ์์ ๋ ๊ณ ๋ฅธ ์์๋ค์ ์ถ๋ ฅํ๋ค. if toPick == 0 { print(picked.joined(separator: " ")) return } // ์์ ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค. for next in 0..<n { // ๋ฐฉ๋ฌธํ ์์๋ ๊ฑด๋๋ด๋ค. if visited[nums[next]]! { continue } visited[nums[next]] = true picked.append(String(nums[next])) pick(n: n, toPick: toPick - 1) picked.removeLast() visited[nums[next]] = false } } pick(n: n, toPick: m)
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.