맛있는감귤

BOJ : 6603 로또 본문

알고리즘/백준 알고리즘

BOJ : 6603 로또

맛있는감귤 2017. 3. 3. 16:00

문제 : https://www.acmicpc.net/problem/6603

출처

Contest > University of Ulm Local Contest > University of Ulm Local Contest 1996 F번


비스마스킹을 이용해 brute force로 해결했습니다.

6개의 번호안에 들어가냐 마냐의 차이기 때문에 그렇고 또 이렇게해서 사전 순으로 출력이 가능하기 때문입니다.

N의 갯수만큼 들어오는 i 값을 2진수로 변환 한뒤 0(6개 번호안에 포함되는 숫자) 가 6개인 녀석만 출력해주었습니다.

#include <stdio.h>
#include <math.h>

void print(int num[], int i_num, int N){
    int place[13], cnt=0, exc = N-6;
    bool flag = true;
    for(int i=N-1;i>=0;i--){
        if(i_num%2) cnt++;
        place[i] = i_num%2;
        i_num/=2;
        if(cnt > exc) {
            flag = false;
            break;
        }
    }
    if(flag && N-cnt == 6){
        int _cnt=0;
        for(int i=0; i<N; i++){
            if(!place[i]) {
                if(++_cnt == 6) printf("%d\n",num[i]);
                else printf("%d ",num[i]);
            }
        }
    }
}
int main(){
    while(1){
        int N,num[13];
        scanf("%d",&N);
        if(N==0) break;
        for(int i=0;i<N;i++)
            scanf("%d",&num[i]);
        
        for(int i=0; i<pow(2,N); i++)
            print(num, i, N);
        printf("\n");
    }
}


'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

BOJ : 1967 트리의 지름  (0) 2017.03.03
BOJ : 1193 분수찾기  (0) 2017.03.03
BOJ : 5430 AC  (0) 2017.03.03
BOJ : 12761 돌다리  (0) 2017.03.03
BOJ : 2146 다리 만들기  (0) 2017.03.03