Algorithm

[Baekjoon] 16439번 치킨치킨치킨 - Javascript

호밀이 2024. 1. 26. 22:33

https://www.acmicpc.net/problem/16439

 

16439번: 치킨치킨치킨

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

www.acmicpc.net

문제

N명의 고리 회원들은 치킨을 주문하고자 합니다.

치킨은 총 M가지 종류가 있고 회원마다 특정 치킨의 선호도가 있습니다. 한 사람의 만족도는 시킨 치킨 중에서 선호도가 가장 큰 값으로 결정됩니다. 진수는 회원들의 만족도의 합이 최대가 되도록 치킨을 주문하고자 합니다.

시키는 치킨의 종류가 많아질수록 치킨을 튀기는 데에 걸리는 시간도 길어지기 때문에 최대 세 가지 종류의 치킨만 시키고자 합니다.

진수를 도와 가능한 만족도의 합의 최댓값을 구해주세요.

입력

첫 번째 줄에 고리 회원의 수 N (1 ≤ N ≤ 30) 과 치킨 종류의 수 M (3 ≤ M ≤ 30) 이 주어집니다.

두 번째 줄부터 N개의 줄에 각 회원의 치킨 선호도가 주어집니다.

i+1번째 줄에는 i번째 회원의 선호도 ai,1, ai,2, ..., ai,M (1 ≤ ai,j ≤ 9) 가 주어집니다.

출력

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

예제 입력 1 복사

3 5
1 2 3 4 5
5 4 3 2 1
1 2 3 2 1

예제 출력 1 복사

13

예제 입력 2 복사

4 6
1 2 3 4 5 6
6 5 4 3 2 1
3 2 7 9 2 5
4 5 6 3 2 1

예제 출력 2 복사

25

 

문제풀이(1)

치킨의 종류는 3개이며, 치킨 선호도 점수의 최대합을 구하는 문제이다.
아래와 같은 input이 있을 때, 1번 = 6번째 치킨, 점수 6점 | 2번 = 1번째 치킨, 점수 6점 | 3번 = 4번째 치킨, 점수 9점이다.
이때, 4번의 최대값은 6이지만 1, 4, 6번째 치킨 중 가장 선호도 점수가 높은 1번째 치킨의 선호도만 구할 수 있다.
완전탐색을 통해 문제를 풀 수 있다.

const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");

const [N, M] = input.shift().split(" ").map(Number);
const arr = input.map((el) => el.split(" ").map(Number));

const answer = [];

for (let i = 0; i < M - 2; i++) {
  for (let j = i + 1; j < M - 1; j++) {
    for (let k = j + 1; k < M; k++) {
      let total = 0;

      arr.forEach((el) => {
        total += Math.max(el[i], el[j], el[k]);
      });

      answer.push(total);
    }
  }
}

console.log(Math.max(...answer));