본문 바로가기

알고리즘/백준

백준 16439 - 치킨치킨치킨

문제

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

 

#백준/실버4/치킨치킨치킨
from itertools import combinations

N,M = map(int,input().split())

favor = []

for _ in range(N):
    favor.append(list(map(int, input().split())))
    
max_sum = 0

for a,b,c in combinations(range(M),3):
    temp = 0
    for i in range(N):
        temp += max(favor[i][a],favor[i][b],favor[i][c])
        
    max_sum = max(max_sum, temp)

print(max_sum)

 

문제 이해를 잘 못했다.

 

처음엔 행렬을 전부 돌면서 측정하려 했는데 그게 아니라 가능한 치킨 메뉴 조합을 전부 돌아서 측정하면 된다.

 

여기서 또 combination을 활용하면 쉽게 풀 수 있다.

'알고리즘 > 백준' 카테고리의 다른 글

백준 2485 - 가로수  (0) 2024.05.26
백준 1246 - 온라인 판매  (1) 2024.05.23
백준 1268 - 임시 반장 정하기  (0) 2024.05.21
백준 2870 - 수학숙제  (0) 2024.05.20
백준 28292 - 개미 수열  (0) 2024.05.19