[BOJ] 16439 - 치킨치킨치킨

suhyun·2022년 10월 24일
0

백준/프로그래머스

목록 보기
27/81

문제 링크

16439-치킨치킨치킨


입력

첫 번째 줄에 고리 회원의 수 N (1 ≤ N ≤ 30) 과 치킨 종류의 수 M (3 ≤ M ≤ 30) 이 주어집니다.
두 번째 줄부터 N개의 줄에 각 회원의 치킨 선호도가 주어집니다.
i+1번째 줄에는 i번째 회원의 선호도 ai,1, ai,2, ..., ai,M (1 ≤ ai,j ≤ 9) 가 주어집니다.


출력

첫 번째 줄에 고리 회원들의 만족도의 합의 최댓값을 출력합니다.


문제 풀이

이상하게 안풀리던 문제..
풀고나니깐 왜 못풀었는지도 이해 안가는 문제
되게 어려운 문제는 아니었다~

import java.util.Scanner;

public class Main {

    static int[][] chicken;
    static boolean[] visited;
    static int n, m, max = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();

        chicken = new int[n][m];
        visited = new boolean[m];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                chicken[i][j] = sc.nextInt();
            }
        }

        getMax(0, 0);
        System.out.println(max);

    }

    static void getMax(int depth, int start) {

        if (depth == 3) {
            int sum = 0;

            for (int i = 0; i < n; i++) {
                int num = Integer.MIN_VALUE;
                for (int j = 0; j < m; j++) {
                    if (visited[j]) {
                        num = Math.max(num, chicken[i][j]);
                    }
                }
                sum += num;
            }
            max = Math.max(max, sum);
        }

        for (int i = start; i < m; i++) {
            if (!visited[i]) {
                visited[i] = true;
                getMax
                (depth + 1, i + 1);
                visited[i] = false;
            }
        }
    }
}

profile
꾸준히 하려고 노력하는 편 💻

0개의 댓글