본문 바로가기
알고리즘/BOJ

BOJ 5921 ) Escaping the Farm (C++)

by twinkite 2022. 6. 13.
반응형
 

5921번: Escaping the Farm

The cows have decided on a daring plan to escape from the clutches of Farmer John. They have managed to procure a small inflatable raft, and during the cover of night, a group of cows will board the raft and row across the river bordering the farm. The pla

www.acmicpc.net

 소가 20마리밖에 되지 않으므로 모든 경우를 고려해도 된다. DFS를 이용해 각 소를 배에 태울지 말지를 고른 후 N번째 소에 대한 선택까지 끝나면 각 자릿수의 합에서 자리올림이 발생하는지를 검토한다. 

 

#include <iostream>
using namespace std;

int arr[20][9];
int visited[20];
int N, ans;

void dfs(int idx){
    if(idx==N){
        for(int i=0;i<9;i++){
            int sum = 0;
            for(int j=0;j<N;j++){
                if(!visited[j]) continue;
                sum+=arr[j][i]; // i번째 자릿수를 더함
            }
            if(sum>=10) return;
        }
        int cnt =0;
        for(int i=0;i<N;i++){
            if(visited[i]) {
                cnt++;
            }
        }
        ans = max(cnt, ans);
    }
    else {
        visited[idx]=1;
        dfs(idx+1);
        visited[idx]=0;
        dfs(idx+1);
    }
}

int main(){
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    cin>>N; int num;
    for(int i=0;i<N;i++){
        cin>>num; int j=0;
        while(num>0){
            arr[i][j]=num%10;
            num/=10;
            j++;
        }
    }

    visited[0]=1;
    dfs(0);
    cout<<ans;


    return 0;
}
반응형

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

BOJ 15705 ) 단어 찾기 (C++)  (0) 2022.06.19
BOJ 3190 ) 뱀 (C++)  (0) 2022.06.16
BOJ 18877 ) Social Distancing (C++)  (0) 2022.06.10
BOJ 2428 ) 표절 (C++)  (0) 2022.06.09
BOJ 2636 ) 치즈 (C++)  (0) 2022.05.09