본문 바로가기
ps

[백준] 1774 - 수 묶기

by FAPER 2024. 2. 20.
def f0(n):
    if n > 0 and n != 1:
        return True
    return False
def f1(n):
    if n < 0:
        return True
    return False

n = int(input())
l = [int(input()) for _ in range(n)]
zero = l.count(1)
mino = list(filter(f1,l))
plus = list(filter(f0,l))
mino.sort()
plus.sort(reverse=True)
ans = 0
if len(mino) % 2 == 0 :
    for i in range(0,len(mino),2):
        ans += mino[i] * mino[i+1]
else:
    for i in range(0,len(mino)-1,2):
        ans += mino[i] * mino[i+1]
    if not 0 in l:
        ans += mino[len(mino)-1]

if len(plus) % 2 == 0 :
    if len(plus) == 2:
        ans += max(plus[0]+plus[1],plus[0]*plus[1])
    else:
        for i in range(0,len(plus),2):
            ans += plus[i] * plus[i+1]
else:
    for i in range(0,len(plus)-1,2):
        ans += plus[i] * plus[i+1]
    ans += plus[len(plus)-1]
ans += zero
print(ans)

 

풀이 : 

 

음수면 오름차순

양수면 내림차순

0이 존재하는지?

1이 존재 하는지?

조건 분기를 따져서 정렬하고 계산해주면 된다. 

음수가 홀수 개 있으면 제일 작은 수만 남기고 모두 묶어주면 되고

음수가 홀수 개 있을 때 0이 존재하면 나머지도 0이랑 묶어서 0으로 만들어 주면 되고

양수가 홀수 개 있으면 제일 작은 수만 남기고 모두 묶어주면 되고

양수에서 1은 곱하는 것 보단 더하는게 무조건 이득이니 따로 빼서 계산 한다. 

'ps' 카테고리의 다른 글

[백준] 2421 저금통  (0) 2025.01.30
[백준] 14500 테르로미노  (1) 2024.06.09
백준 큰 수 만들기  (0) 2024.01.14
[백준 2916] 도영이가 만든 맛있는 음식 [JS]  (0) 2024.01.11
[백준] 15656 N과 M (7) Node js 풀이  (0) 2024.01.07