[Baekjoon] - 11단계 : 브루트 포스

1. 블랙잭

#include <stdio.h>

int main(){
    int n,m;
    scanf("%d %d",&n, &m);
    
    int card[n+1];
    for(int i=0;i<n;i++)
        scanf("%d", &card[i]);
    
    int sum = 0;
    int max = 0;
    for(int i=0;i<n-2;i++){
        for(int j=i+1;j<n-1;j++){
            for(int k=j+1;k<n;k++){
                if(i==j || j==k) continue;
                sum = card[i] + card[j] + card[k];
                if(sum > m) continue;
                if(max < sum) max = sum;
            }
        }
    }
    if(max > m) printf("%d",m);
    else printf("%d",max);
}

2. 분해합

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    
    int min = 1000001;
    for(int i=n-1;i>=1;i--){
        int num = i;
        int sum = num;
        while(num > 0){
            sum += num%10;
            num /= 10;
        }
        if(n == sum) min = i;
    }
    if(min == 1000001) printf("0");
    else printf("%d",min);
}

3. 덩치

#include <stdio.h>

struct info{
    int x[51];
    int y[51];
};

int main(){
    int t;
    scanf("%d",&t);
    
    struct info info;
    
    int grade[51];
    
    for(int i=0;i<t;i++){
        scanf("%d %d",&info.x[i],&info.y[i]);
        grade[i] = 1;
    }
    for(int i=0;i<t;i++){
        for(int j=0;j<t;j++){
            if(info.x[i] < info.x[j] && info.y[i] < info.y[j]){
                grade[i]++;
            }
        }
    }
    for(int i=0;i<t;i++) printf("%d ",grade[i]);
}

4. 체스판 다시 칠하기

#include <stdio.h>

char board[50][50];

int check(int x, int y, int min){
    int startW = 0;
    int startB = 0;
    for(int i=x;i<x+8;i++){
        for(int j=y;j<y+8;j++){
            if((i+j)%2 == 0){
                if(board[i][j] == 'B') startW++;
                else startB++;
            }
            else{
                if(board[i][j] == 'B') startB++;
                else startW++;
            }
        }
    }
    min = min > startW ? startW : min;
    min = min > startB ? startB : min;
    return min;
}

int main(){
    int m,n;
    int min = 100;
    
    scanf("%d %d",&m, &n);
    
    for(int i=0;i<m;i++){
        scanf("%s", board[i]);
    }
    
    for(int i=0;i<m-7;i++){
        for(int j=0;j<n-7;j++){
            min = check(i,j,min);
        }
    }
    
    printf("%d", min);
}

5. 영화감독 숌

#include <stdio.h>

int main(){
    int n,i;
    int temp = 0;
    scanf("%d",&n);
    
    int count = 1;
    for(i=667;count!=n;i++){
        temp = i;
        while(temp > 0){
            if(temp%1000 == 666){
                count++;
                break;
            }
            temp /= 10;
        }
    }
    
    printf("%d",i-1);
}

요약

  • 블랙잭 21!
  • 무지성 분해합
  • 체크메이트.