CodingTest/Content

백준 20300번 서강근육맨 풀이 및 정답(python)

코딩스케치 2025. 3. 24. 20:39


문제 설명 및 풀이

한번에 2개의 기구씩 쓸 수 있으며 각 기구의 근손실 정도가 주어집니다.

근손실 수치의 2개의 기구를 이용하는 경우 2개의 합,

1개의 기구를 이용하는 경우 해당 기구의 근손실 정도입니다.

최소 근손실 수치가 목적이기 때문에 짝수개의 기구가 주어지는 경우,

홀수개의 기구가 주어지는 경우를 구분합니다.

 

=> 오름차순으로 기구를 정렬합니다.

=> 가장 작은값과 가장 큰 값을 더해 가장 크게 나오는 수를 찾습니다.

=> 홀수면 기구가 하나 남기에 가장 큰 값 하나를 max로 먼저 잡고 시작합니다.


정답 예시 코드

import sys
input = sys.stdin.readline

n = int(input())
loss_list = list(map(int, input().split()))

# 기계가 홀수개인지 체크
odd = False
if len(loss_list) % 2 != 0:
    odd = True

# 오름차순 정렬
loss_list.sort()

max_value = -1
left = 0
right = len(loss_list) - 1

# 홀수개인 경우 가장 큰 값 먼저 처리
if odd == True:
    right -= 1
    max_value = loss_list[len(loss_list) - 1]

# 가장 작은 값, 가장 큰 값 하나씩 더해주면서 가장 큰 근손실 찾기
while left < right:
    max_value = max(max_value, loss_list[left] + loss_list[right])
    left += 1
    right -= 1 
print(max_value)