[1744번] 수 묶기

박형진·2023년 4월 11일
0

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


"""
0: 음수를 제거할 수 있는 용도
1: 1과 다른 양수를 곱하면 값이 더 작아지므로 바로 합에 더함
음수: [-5*-10 = 50] 같이 곱이 더 큰 값을 가지는 일반적인 경우만 음수 리스트에 추가
양수: [8*7 = 56]
"""

ans = 0
N = int(input())
arr = [int(input()) for _ in range(N)]

zero = False
negative = []
positive = []

for num in arr:
    if num == 0:
        zero = True  # 0은 한번만 사용하게 된다.
    elif num == 1:
        ans += 1
    elif num >= 1:
        positive.append(num)
    else:
        negative.append(-num)

negative.sort()
positive.sort()
while len(positive)>=2:
    A = positive.pop()
    B = positive.pop()
    ans += (A*B)
if positive:
    ans += positive[0]

# while 문을 벗어나면 남은 negative 리스트의 길이는 0 또는 1 보장
while len(negative)>=2:
    A = negative.pop()
    B = negative.pop()
    ans += (A*B)
if negative:
    if not zero:
        ans -= negative[0]
print(ans)

2. 후기

코드를 복잡하게 만들지 않기 위해서 1을 제외한 양수와 1을 따로 구분했다. 0을 음수 제거 용도로 사용할 수 있다는 생각을 떠올리면 문제가 단순해진다.

  • 1은 바로 ans에 더해준다.
  • while len(리스트)>=2 적절하게 사용
profile
안녕하세요!

0개의 댓글