Recursion

4-3: k개의 1을 가진 n자리 이진패턴 경우 출력

SWC123 2018. 10. 24. 20:15

tobin (tobin.cpp)

 

문제


두 정수 n, k를 입력받아 k개의 1을 가진 n자리 이진 패턴을 출력하는 프로그램을 작성하세요.

 

입력


두 정수 n,k가 입력으로 주어진다. ( 0< n <= 30, 0 <= k < 8 , n>=k )

 

출력


결과를 내림차순으로 출력한다.

 

예제 입력

2 1

예제 출력

10
01

 

예제 입력

2 0

예제 출력

00

 

예제 입력

4 2

예제 출력

1100
1010
1001
0110
0101
0011


import java.util.Scanner;

public class tobin2 {

/**
*
* 문제:
* 두 정수 n, k를 입력받아 k개의 1을 가진 n자리 이진 패턴을 출력하는 프로그램을 작성하세요.
*
*
* 입력:
* 두 정수 n,k가 입력으로 주어진다. ( 0< n <= 30, 0 <= k < 8 , n>=k )
*
*
* 출력:
* 결과를 내림차순으로 출력한다.
*
* 예제 입력:
* 2 1
*
* 예제 출력:
* 10
* 01
*
* @param args
*/

static int N, K, digits[];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
digits = new int[N];

//n is numDigits
//k is target 1s count.


printBinary(0,K);

}

private static void printBinary(int index, int k) {

// if (index == N) return;

if (k==0){
print();
return;
}

if (index == N) return;

//case 1: digit is 1.
digits[index] = 1;
printBinary(index+1, k-1);

//case 0: digit is 0.
digits[index] = 0;
printBinary(index+1, k);


}

private static void print() {
for (int i=0; i< N; i++){
System.out.print(digits[i]);
}
System.out.println();
}

}