문제 링크
https://www.acmicpc.net/problem/1744
정답 코드
import sys
N = int(sys.stdin.readline())
positive = []
negative = []
result = 0
for i in range(N):
num = int(input())
if num > 1:
positive.append(num)
elif num <= 0:
negative.append(num)
else:
result += num
positive.sort(reverse=True) #양수는 큰 것부터 최대한 많이 곱해야 큰 값을 얻을 수 있음. 내림차순.
negative.sort() #음수는 작은 것부터 최대한 많이 곱해야 큰 값을 얻을 수 있음. 오름차순.
# 양수끼리 곱해주기
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)
#0,양수: 덧셈. 0,음수:곱셈
#1,양수: 덧셈. 0,음수:덧셈
#양수,양수: 곱셈. 음수,음수: 곱셈. 양수,음수: 덧셈
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 2447번 파이썬. 분할 정복. (0) | 2023.01.18 |
---|---|
Baekjoon Online Judge 11728번 (0) | 2023.01.13 |
Baekjoon Online Judge 11399번 파이썬. 그리디. (0) | 2023.01.09 |
Baekjoon Online Judge 1931번 파이썬. 그리디. (0) | 2023.01.09 |
Baekjoon Online Judge 1783번 파이썬. 그리디. (0) | 2023.01.06 |