본문 바로가기
백준/그리디

[백준] #20300 서강 근육맨 (python)

by 똥먹는낙타 2022. 2. 24.
728x90
반응형

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

 

20300번: 서강근육맨

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

www.acmicpc.net

 

수학 기호 복사가 안돼서 캡쳐했는데.. 이게 더 편한가?


# Code

n = int(input())
pt = list(map(int,input().split()))
min = -1

pt.sort()

if n % 2 == 0: # 짝수면
    while pt:
        sum = pt[0] + pt[-1]
        del pt[0]
        del pt[-1]
        if min < sum:
            min = sum
else:
    min = pt[-1]
    del pt[-1]
    while pt:
        sum = pt[0] + pt[-1]
        del pt[0]
        del pt[-1]
        if min < sum:
            min = sum


print(min)

# Comment

처음엔 아무생각 없이 오름차순 정렬 한 후, n이 짝수면 첫번째 값과 마지막 값 더한 것을 출력하고 n이 홀수면 가장 큰 값인 맨 마지막 값을 출력하도록 했는데 바로 틀렸다. 1 3 8 9 처럼 1+9 와 3+8 중에 3+8이 더 큰 경우를 생각하지 않은 것이다... ㅎㅎ 

n이 짝수일 경우 :  sum은 pt[0](가장 적은 근손실량) + pt[-1](가장 큰 근손실량) -> 앞에서 계산해준 배열의 값들을 제거한 후 min값과 비교해서 min 값이 더 작을 경우에 sum 값으로 바꿔줌

n이 홀수일 경우 :  min 값을 배열의 가장 마지막 값, 가장 큰 근손실량으로 정해주고 해당 값을 배열에서 제거함 -> n이 짝수일 때와 마찬가지로 sum 값 이용해서 min과 비교해서 min 값이 더 작을 경우에 sum 값으로 바꿔줌

=> 두 경우 모두 pt 배열에 값이 다 제거될 때 까지 반복!! 

 

728x90
반응형

댓글