본문 바로가기
알고리즘/그리디

[백준][Python] 20300 서강근육맨

by 임짠짠 2022. 3. 31.
반응형
 

20300번: 서강근육맨

PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다.

www.acmicpc.net

 

코드

import sys
n = int(input())
n_list = list(map(int,sys.stdin.readline().split()))

n_list.sort()
max = 0
if n%2 == 0:
    for i in range(n//2):
        num = n_list[i]+n_list[-1-i]
        if num > max:
            max = num
else:
    for i in range(n//2):
        num = n_list[i]+n_list[-2-i]
        if num > max:
            max = num
    if max < n_list[-1]:
        max = n_list[-1]

print(max)

 

설명

먼저 운동기구의 개수가 홀수인지 짝수인지 알아야 한다. 그리고 입력받은 수를 오름차순이나 내림차순으로 정렬한다.

홀수일 때는 운동기구 하나만 사용하는 날이 존재하는데 그때는 근손실이 가장 큰 운동기구를 사용해야 한다. 그리고 그것을 제외한 나머지 수들은 i번째와 (-2-i)번째끼리 더해서 max값과 비교해가면서 가장 큰 값을 찾는다.

짝수일때는 그냥 i번째와 (-1-i)번째끼리 더해서 비교해주면 된다.

반응형

댓글