youngjaeLee1026
2022. 3. 31. 12:07
1. 문제
2. 입출력
3. 입출력 예시
4. 문제 설계
- 순열 구하는 문제와 동일하게 Back-tracking 알고리즘을 통해 문제를 해결할 수 있음
- 여기서 주의할 점은 주어진 k개 만큼의 1을 다 소모해야 하고, 각 이진수에 1이 k개 만큼만 포함되어 있어야 하므로
- k가 0이될 때만 출력을 해주어야함
5. 전체 코드
//MARK: - tobin
//MARK: - Framework
import Foundation
//MARK: - Variable
var n: Int = 0
var k: Int = 0
//MARK: - Function
func getBinary(_ current: Int, _ result: inout [Int]) -> Void {
if current >= n {
if k == 0 {
var answer: String = ""
for i in 0..<n {
answer += "\(result[i])"
}
print(answer)
}
} else {
if k == 0 {
var answer: String = ""
for i in 0..<n {
answer += "\(result[i])"
}
print(answer)
} else {
for i in stride(from: 1, through: 0, by: -1) {
result[current] = i
k += i == 1 ? -1 : 0
getBinary(current + 1, &result)
k += i == 1 ? 1 : 0
}
}
}
}
func solution() -> Void {
//MARK: - Input
guard let input = readLine()?.components(separatedBy: " ") else { return }
n = input.map { Int($0) }[0] ?? 0
k = input.map { Int($0) }[1] ?? 0
var result: [Int] = Array(repeating: 0, count: n + 10)
//MARK: - Process & Output
getBinary(0, &result)
}
solution()
전체코드는 여기에서 확인할 수 있습니다.