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

 

1744번: 수 묶기

길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에

www.acmicpc.net

 

 

문제 풀이

- 수열이 주어질 때, 값 들을 곱해서 최대 합을 구하기

- 2가지 수를 묶거나 묶지 않을 수 있다.

- 양수값과 음수값을 따로 구해서 곱해준다.

N = int(input())  # 수열의 크기
plus = []
minus = []
res = 0

for _ in range(N):
    num = int(input())
    if num > 1:
        plus.append(num)
    elif num == 1:
        res += 1
    else:
        minus.append(num)

plus.sort(reverse=True)
minus.sort()
plus_size, minus_size = len(plus), len(minus)

if len(plus) % 2 == 0:  # 양수 + 짝수 개수
    for idx in range(0, plus_size, 2):
        res += plus[idx] * plus[idx + 1]
else:  # 양수 + 홀수 개수
    res += plus[plus_size - 1]  # 마지막 값
    for idx in range(0, plus_size - 1, 2):
        res += plus[idx] * plus[idx + 1]

if len(minus) % 2 == 0:  # 음수 + 짝수 개수
    for idx in range(0, minus_size, 2):
        res += minus[idx] * minus[idx + 1]
else:  # 음수 + 홀수 개수
    res += minus[minus_size - 1]  # 마지막 값
    for idx in range(0, minus_size - 1, 2):
        res += minus[idx] * minus[idx + 1]

print(res)

+ Recent posts