백준 1744번 수 묶기

highway92·2021년 10월 4일

백준

목록 보기
16/27

문제출처: https://www.acmicpc.net/problem/1744

풀이과정

  1. 입력받은 수를 minus,plus,zero,one으로 나눈다.

  2. minus는 절댓값이 큰 수부터 두개씩 묶어주고 1개가 남으면 0이 있는경우 0과 묶어준다.

  3. 1은 그대로 나둔다(그냥 더해주는게 제일 좋음)

  4. plus는 큰 수 부터 2개씩 묶어준다.

import sys
input = sys.stdin.readline

n = int(input())
minus = []
plus = []
zero = []
one = []
result = 0
for i in range(n):
    num = int(input())
    if num == 0:
        zero.append(num)
    elif num == 1:
        one.append(num)
    elif num > 1:
        plus.append(num)
    else:
        minus.append(num)


minus.sort(key=lambda x:abs(x))
plus.sort()


while True:
    if len(minus) == 1 and zero:
        zero.pop()
        minus.pop()
        break
    if len(minus) // 2 < 1:
        break
    a = minus.pop()
    b = minus.pop()
    result += a*b

while True:
    if len(plus) // 2 < 1:
        break
    a = plus.pop()
    b= plus.pop()
    result += a*b

if minus:
    result += sum(minus)
if one:
    result += sum(one)
if plus:
    result += sum(plus)

print(result)
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글