https://www.acmicpc.net/problem/1744
>> 문제 포인트
- 양수의 경우 큰수부터 두개씩 묶기
positive = [5,4,3,2] => 5*4 / 3*2
-1의 경우는 곱하면 아무 이득이 없으므로 묶지말고 더해주기
- 음수의 경우 절대값이 큰 수부터(작은수부터) 두개씩 묶기
negative = [-5, -4, -3, -2] => -5 *-4 / -3*-2
-음수를 두개씩 묶고 하나가 남았을 때,
=> 0이 나왔었다면 0이랑 곱해서 없애주는게 이득
=> 0이 안나왔었다면 그냥 더함
#1744
#0인 경우-> 포함x
#음수와 양수를 따로 모으기
positive=[]
negative=[]
result=0
n= int(input())
flag=0
for _ in range(n):
k= int(input())
# 1의 경우 곱하면 아무 이득이 없으므로 더해주기
if k==1:
result+=1
elif k>1:
positive.append(k)
#2개씩 묶어 음수 1개가 남았다면 더하기보다 0이랑 곱해주는게 이득(negative에 0포함)
else:
negative.append(k)
#양수는 큰수부터 2개씩 묶기
positive= sorted(positive, reverse=True)
#음수는 절대값이 큰 수부터 2개씩 묶기
negative= sorted(negative)
for i in range(0, len(positive), 2):
if i+1 >= len(positive):
result+=positive[i]
else:
result+=positive[i]*positive[i+1]
for i in range(0, len(negative), 2):
if i+1 >= len(negative):
result+=negative[i]
else:
result+=negative[i]*negative[i+1]
print(result)
'백준 문풀' 카테고리의 다른 글
[Python] 그리디 - 12904. A와 B(골5) (0) | 2023.08.06 |
---|---|
[Python] 그리디- 2847. 게임을 만든 동준이(실4) (0) | 2023.08.06 |
[Python] 그리디 - 1343.폴리오미노(실5) (0) | 2023.08.04 |
[Python] 그리디- 1339. 단어수학(골4) (0) | 2023.08.03 |
[Python] 위상정렬 - 14676. 영우는 사기꾼?(골3) (0) | 2023.08.03 |