[백준-1744] 수 묶기

FeelingXD·2023년 12월 9일
0

문제풀이

목록 보기
32/34
post-thumbnail

❓ Problem

🤔 How

고민해야할점은 수를 묶었을때 묶지않았을때 결과를 어떻게 적용하여야 최선인가를 고려해야한다.

  1. 1의경우 : 다른수와 묶었을때 나올수있는기대값은 (|n|, -|n|, 0) , 그럼 더했을때는 어떨까 (|n|+1, -|n|+1,1) 즉 1의경우는 결과에 더했을때 최대의 값이 나오도록 할수있다.
  2. 음수와 0의 경우 : 음수의경우의 최적은 음수 두개를 묶었을경우 양수가되고 최대가 되도록해야한다. 그렇지못할경우 0과 묶어서 0이되도록 하여음수결과를 최대한 나오지않도록한다. 나오더라도 최소값이 나오도록한다.
  3. 1이 아닌 양수의경우 : 1이아닌 양수의 경우는 음수 두개를 묶었을때 최대가 되도록해야한다.

❗ Solve

# 수 묶기
import sys
input =sys.stdin.readline


def solution():
    plus=[]
    minus=[]
    res=0
    for _ in range(n:=int(input())):
        v=int(input())
        if v>1:
            plus.append(v)
        elif v<=0:
            minus.append(v)
        else:
            res+=1
    plus.sort(reverse=True)
    minus.sort()
    
    # 양수
    for i in range(0,len(plus),2):
        if i+1>=len(plus): # 인덱스 초과
            res+=plus[i]
        else:
            res+=plus[i]*plus[i+1]
    #음수
    for i in range(0,len(minus),2):
        if i+1 >= len(minus):
            res+=minus[i]
        else:
            res+= (minus[i] * minus[i+1])
    print(res)
    pass
if __name__=="__main__": # 실행되는 부분
    solution()
    pass
profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글