๋๋ ์ด๋ค ์ ํ์ ์ ํํ๋ ์ฝ๋๋ฅผ ์ธ์ฐ๋ฉด, ๋๋ถ๋ถ์ ๋ฌธ์ ๋ฅผ ๊ทธ ๋ฐฉ์์ ์์ฉํด์ ํผ๋ค. ๊ทธ๋์ ์ด ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๋นํจ์จ์ ์ธ ์ฝ๋๊ฐ ๋์๋ค. ์๊ฐ์ ๋ณด๋ ๋ค๋ฅธ ๋ถ์ ๋นํด ์ฝ 50๋ฐฐ๊ฐ ๋๋ ธ๋ค(โฆ). ๊ทธ๋์ ๋ ๊ฐ๊ฒฐํ ์ฝ๋๊ฐ ๊ถ๊ธํด์ ์ดํด๋ณด์๋๋ฐ, ๊ตณ์ด ๋ฐฐ์ด์ ์ฐ์ง ์๊ณ , ๋ณ์์ ์ ์ฅํด์ ์ฌ๊ท๋ฅผ ๋๊ธฐ๊ณ (?), ํ๋ ๋ฐฉ์์ผ๋ก ํ๋๋ผ. ์๋ฌดํผ ์ด๊ฑด ๋์ค์ ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.
๋ฌธ์
https://www.acmicpc.net/problem/1182
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift
let input = readLine()!.split(separator: " ").map { Int(String($0))! } let n = input[0] let target = input[1] let nums = readLine()!.split(separator: " ").map { Int(String($0))! } var count = 0 var picked = [Int]() var visited = Array(repeating: false, count: n) func pick(toPick: Int, start: Int) { if toPick == 0 { if picked.reduce(0, +) == target { count += 1 } return } for i in start..<n { if visited[i] { continue } visited[i] = true picked.append(nums[i]) pick(toPick: toPick - 1, start: i + 1) picked.removeLast() visited[i] = false } } for i in 1...n { pick(toPick: i, start: 0) visited = Array(repeating: false, count: n) } print(count)
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.