티스토리 뷰

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

 

20300번: 서강근육맨

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

www.acmicpc.net

문제이해

  • PT를 한 번 받을 때 운동기구를 최대 두 개 까지만 선택할 수 있다.
  • 이전에 사용하지 않았던 운동기구를 선택하기로 계획을 세웠다.
  • PT를 한 번 받을 때의 근손실 정도가 M을 넘지 않도록 하고 싶다.
  • 이때, M의 최솟값을 구하자.
  • 운동기구를 두 개 사용해서 PT를 받을 때의 근손실 정도는 두 운동기구의 근손실 정도의 합이다.

문제풀이

처음에는 정렬을 하고 중간값들 두개를 더하면 근솔실 정도의 최소값이라고 생각했다.

하지만 이는 중복이 없을 경우만 되고 중복이 있을 경우에는 계산되지 않는다.

 

문제에서는 중복을 허용하여 입력을 받기에 아래와 같이 풀 수 있다.

 

  • 정렬을 하고 양끝 값 끼리 더해가며 최소값을 갱신해나가면 정답을 구할 수 있다.
  • 입력받은 근손실 리스트의 길이가 홀수와 짝수일 경우 min_lost(최소 근손실)값을 달리하여 계산한다.

 

풀이코드

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

def solution(start, end, lost, min_lost):
    while start<end:
        temp=lost[start]+lost[end]
        if temp > min_lost:
            min_lost=temp
        start+=1
        end-=1
        
    return min_lost

lost.sort()
start, end = 0, n-1
result=-1
if n%2:
    min_lost=lost[end]
    end-=1
    result=solution(start, end, lost, min_lost)
else:
    result=solution(start, end, lost, -1)
print(result)

'코딩테스트 > 백준' 카테고리의 다른 글

백준 - 잃어버린 괄호(1541, 파이썬)  (0) 2023.03.16
백준-사탕 게임(3085, 파이썬)  (0) 2023.03.16
백준-2477(파이썬)  (0) 2022.10.12
백준-15686(파이썬)  (1) 2022.10.11
백준-11286(파이썬)  (0) 2022.10.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함