Module: 지정된 마스크의 모든 하위 패턴을 반복합니다.


Problem

1 /7


주어진 길이의 이진 문자열

Theory Click to read/hide

특정 길이의 모든 비트 시퀀스를 열거해야 하는 경우가 발생합니다. 또는 다른 말로 가능한 모든 옵션을 반복하여 각 개체에 대해 두 가지 가능한 상태 중 하나를 선택합니다.

이러한 상황에서 비트 마스크를 사용하여 열거를 구현할 수 있습니다. 이 접근 방식의 장점은 이러한 코드가 비재귀적으로 작동하고 컬렉션 등이 아닌 숫자에 대해 작동하므로 성능이 크게 향상된다는 것입니다.

비트마스크를 사용하는 일반적인 코드는 다음과 같습니다. 정수; // oobject 수(비트 시퀀스의 길이) for (int mask = 0; mask < (1 < n); mask++) { // 0에서 2^n - 1까지의 모든 숫자를 반복합니다. 여기서 각 숫자는 비트 마스크에 해당합니다. // 현재 숫자 마스크는 i번째 비트가 i번째 개체의 상태를 지정하는 비트 마스크입니다. for (int i = 0; i < n; i++) { // 각 개체의 상태를 이해하기 위해 n 비트를 반복합니다. if ((1 << i) & mask) { // i번째 비트가 1인지 확인 // i번째 객체가 상태 '1'인 옵션을 처리합니다. } else { // i번째 비트가 0인 경우 // 상태 '0'의 i번째 객체를 선택하는 옵션을 처리합니다. } } }
이 코드는 O(2^n * f(n))에서 실행됩니다. 여기서 f(n)은 하나의 특정 반복 가능 항목을 처리하는 데 걸리는 시간입니다.

Problem

<사업부> <사업부>

주어진 숫자 N은 사전순으로 0과 1로 구성된 길이 N의 모든 문자열을 인쇄합니다.

문제를 풀 때 모든 하위 패턴의 열거를 사용합니다.

<사업부>
입력

단수 N이 주어진다.(자연, 1 ≤ N ≤ 10)

<사업부>
출력

0과 1로 구성된 길이 N의 모든 문자열을 한 줄에 하나씩 사전식 순서로 인쇄해야 합니다.

<사업부> <사업부> <사업부> <몸>
 
입력 출력
<예비> 2 <예비> 00 01 10 11