[Algorithm - Baekjoon] 2875번 대회 or 인턴

nunu·2023년 12월 17일
0

Algorithm

목록 보기
104/142

문제

백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)

백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.

백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.

여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

입력

첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N)

출력

만들 수 있는 팀의 최대 개수을 출력하면 된다.

예제1 - 입력

6 3 2

예제1 - 출력

2

예제2 - 입력

2 1 1

예제2 - 출력

0

예제3 - 입력

6 10 3

예제3 - 출력

3

제출코드

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 br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int[][] arrA = new int[n][m];
        int[][] arrB = new int[n][m];

        for (int i = 0; i < n; i++) {
            char[] temp = br.readLine().toCharArray();
            for (int j = 0; j < m; j++) {
                arrA[i][j] = temp[j] - '0';
            }
        }

        for (int i = 0; i < n; i++) {
            char[] temp = br.readLine().toCharArray();
            for (int j = 0; j < m; j++) {
                arrB[i][j] = temp[j] - '0';
            }
        }

        int answer = 0;
        for (int i = 0; i + 3 <= n; i++) {
            for (int j = 0; j + 3 <= m; j++) {
                if (arrA[i][j] == arrB[i][j])
                    continue;

                for (int k = 0; k < 3; k++) {
                    for (int l = 0; l < 3; l++) {
                        arrA[i + k][j + l] = arrA[i + k][j + l] == 0 ? 1 : 0;
                    }
                }
                answer++;
            }
        }

        if (check(arrA, arrB))
            System.out.println(answer);
        else
            System.out.println(-1);
    }
    static boolean check(int[][] arrA, int[][] arrB) {
        for (int i = 0; i < arrA.length; i++) {
            for (int j = 0; j < arrA[0].length; j++) {
                if (arrA[i][j] != arrB[i][j])
                    return false;
            }
        }
        return true;
    }
}
profile
Hello, I'm nunu

0개의 댓글