์ข
๋ง๋ถ์ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ๊ณ ์๋๋ฐ, ๋์ผํ ์ฝ๋์์๋ ๋ถ๊ตฌํ๊ณ ์ค์ํํธ์์๋ ์๊ฐ ์ด๊ณผ, ํ์ด์ฌ์์๋ ํต๊ณผ๋๋ ๊ธฐ๋ฌํ ํ์์ด ์์๋ค. ์๋ ์ฝ๋๋ ๋งค๊ฐ ๋ณ์๋ก picked
๋ฐฐ์ด์ inout
์ผ๋ก ๋ฐ๊ณ ์์๋๋ฐ, ์ด๊ฒ์ด ๋ฌธ์ ์๋ค. ๋์์ ์ฃผ์ ํํ๋๊ป ์ด ์๋ฆฌ๋ฅผ ๋น์ด ๊ฐ์ฌ์ ๋ง์์ ๋๋ฆฐ๋ค. ๐ ์์ธ ์ฐพ๋๋ค๊ณ 1์๊ฐ์ ํค๋งธ๋ค. ํํ
๋ฌธ์
https://www.acmicpc.net/problem/15651
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = input[0]
let m = input[1]
var picked = [Int]()
/*
n: ์ ์ฒด ์์์ ์
picked: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค์ ๋ฒํธ
toPick: ๋ ๊ณ ๋ฅผ ์์์ ์
์ผ ๋, ์์ผ๋ก toPick๊ฐ์ ์์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค
*/
func pick(n: Int, picked:inout [Int], toPick: Int) {
// ๊ธฐ์ ์ฌ๋ก: ๋ ๊ณ ๋ฅผ ์์๊ฐ ์์ ๋ ๊ณ ๋ฅธ ์์๋ค์ ์ถ๋ ฅํ๋ค.
if toPick == 0 {
for p in picked {
print(p, terminator: " ")
}
print()
return
}
// ์์ ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
for next in 1...n {
picked.append(next)
pick(n: n, picked: &picked, toPick: toPick - 1)
picked.removeLast()
}
}
pick(n: n, picked: &picked, toPick: m)
Python
import sys
n, m = map(int, sys.stdin.readline().split())
picked = []
"""
n: ์ ์ฒด ์์์ ์
picked: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค์ ๋ฒํธ
toPick: ๋ ๊ณ ๋ฅผ ์์์ ์
์ผ ๋, ์์ผ๋ก toPick๊ฐ์ ์์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค
"""
def pick(n: int, picked: [int], toPick: int):
# ๊ธฐ์ ์ฌ๋ก: ๋ ๊ณ ๋ฅผ ์์๊ฐ ์์ ๋ ๊ณ ๋ฅธ ์์๋ค์ ์ถ๋ ฅํ๋ค.
if toPick == 0:
print(*picked)
return
# ์์ ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
for next in range(1, n+1):
picked.append(next)
pick(n, picked, toPick - 1)
picked.pop()
pick(n, picked, m)