본문 바로가기

CT

[BOJ] 12단계 브루트 포스

브루트 포스

모든 경우의 수 고려

 

1 2798 블랙잭
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
        int N = Integer.parseInt(tokenizer.nextToken());
        int M = Integer.parseInt(tokenizer.nextToken());

        int[] cards = new int[N];
        tokenizer = new StringTokenizer(reader.readLine());
        for(int i = 0; i < N; i++) {
            cards[i] = Integer.parseInt(tokenizer.nextToken());
        }
        int minGap = Integer.MAX_VALUE;
        int minSum = 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++) {
                    int sum = cards[i] + cards[j] + cards[k];
                    if(M - sum >= 0 && M - sum < minGap) {
                        minGap = M - sum;
                        minSum = sum;
                    }
                }
            }
        }
        System.out.println(minSum);
    }
}

*카드는 1장씩 존재 -> i,j,k 가 중복되면 안됨

 

2 2231 분해합
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(reader.readLine());
        for(int i = 1; i < N; i++) {
            int sum = 0;
            int temp = i;
            while(temp != 0) {
                sum += temp % 10;
                temp = temp / 10;
                if(sum > N) {
                    break;
                }
            }
            if(sum + i == N) {
                System.out.println(i);
                return;
            }
        }
        System.out.println(0);
    }
}

*sum이 N을 넘어서는 순간 분해합이 아닌 것이므로 while 루프를 즉시 빠져나가도록 함

 

3 19532 수학은 비대면강의입니다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
        int a = Integer.parseInt(tokenizer.nextToken());
        int b = Integer.parseInt(tokenizer.nextToken());
        int c = Integer.parseInt(tokenizer.nextToken());
        int d = Integer.parseInt(tokenizer.nextToken());
        int e = Integer.parseInt(tokenizer.nextToken());
        int f = Integer.parseInt(tokenizer.nextToken());

        int x = (c*e - b*f) / (a*e - b*d);
        int y = (d*c - a*f) / (b*d - a*e);
        System.out.println(x + " " + y);
    }
}

 

4 1018 체스판 다시 칠하기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    static char[][] board;

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] split = reader.readLine().split(" ");
        int N = Integer.parseInt(split[0]);
        int M = Integer.parseInt(split[1]);

        board = new char[N][M];
        for(int i = 0; i < N; i++) {
            String str = reader.readLine();
            for(int j = 0; j < M; j++) {
                board[i][j] = str.charAt(j);
            }
        }

        int min = Integer.MAX_VALUE;
        for(int i = 0; i <= N - 8; i++) {
            for(int j = 0; j <= M - 8; j++) {
                int cnt = find(i, j);
                if(min > cnt) {
                    min = cnt;
                }
            }
        }
        System.out.println(min);
    }

    public static int find(int N, int M) {
        int startB = 0;
        int startW = 0;
        for(int i = N; i < N + 8; i++) {
            for(int j = M; j < M + 8; j++) {
                if(i % 2 == 0) {
                    if(j % 2 == 0) {
                        if(board[i][j] == 'W') {
                            startB++;
                        } else {
                            startW++;
                        }
                    } else if(j % 2 == 1) {
                        if(board[i][j] == 'B') {
                            startB++;
                        } else {
                            startW++;
                        }
                    }
                } else {
                    if(j % 2 == 0) {
                        if(board[i][j] == 'W') {
                            startW++;
                        } else {
                            startB++;
                        }
                    } else if(j % 2 == 1) {
                        if(board[i][j] == 'B') {
                            startW++;
                        } else {
                            startB++;
                        }
                    }
                }
            }
        }
        return Math.min(startB, startW);
    }
}

 

 

5 1436 영화감독 숌
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(reader.readLine());

        int cnt = 0;
        for(int i = 666; i < Integer.MAX_VALUE; i++) {
            if(String.valueOf(i).contains("666")) {
                cnt++;
                if(cnt == N) {
                    System.out.println(i);
                    return;
                }
            }
        }
    }
}

 

6 2839 설탕 배달
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int weight = Integer.parseInt(reader.readLine());
        int max5 = weight / 5;
        int max3 = weight / 3;
        for(int i = 0; i <= max3; i++) {
            for(int j = 0; j <= max5; j++) {
                if(i * 3 + j * 5 == weight) {
                    System.out.println(i + j);
                    return;
                }
            }
        }
        System.out.println(-1);
    }
}

*내부 for문을 통해 5kg 짜리로 최대한 무게를 맞추고 3kg을 증가해나가는 방식

'CT' 카테고리의 다른 글

[BOJ] 15단계 약수, 배수와 소수 2  (0) 2023.04.10
[BOJ] 13단계 정렬  (0) 2023.04.06
[BOJ] 11단계 시간 복잡도  (0) 2023.04.05
[BOJ] 10단계 기하: 직사각형과 삼각  (0) 2023.04.04
[BOJ] 9단계 약수, 배수와 소수  (0) 2023.04.04