[BOJ 1744] 수 묶기

joon_1592·2022년 5월 20일

알고리즘

목록 보기
44/51

머리로는 알겠는데 코드로 옮기기가 귀찮은 문제
음수, 0, 1, 양수 따로 저장하고

  1. 데이터 저장
    음수, 0, 1, 양수 따로 저장
  2. 정렬
    음수는 오름차순으로 (절댓값이 내림차순)
    양수는 내림차순으로
  3. 수 묶기
    음수리스트, 양수리스트에서 2개씩 묶어 곱하고 더하기
    answer += A[i] * A[i + 1]
    3.1 리스트 길이가 홀수면 숫자가 한개 남는다. 이를 각각 rest_negative, rest_positive로 저장
  4. 0이 있다면 음수 * 0으로 만들어서 음수를 없애버린다.
  5. 남은 수 모두 더하기
import sys
#sys.stdin = open('input.txt', 'r')
sys.setrecursionlimit(int(1e5))
input = sys.stdin.readline

N = int(input())
isZero = False
ones = 0
positive = []
negative = []

for _ in range(N):
    x = int(input())
    if x == 0:
        isZero = True
    elif x == 1:
        ones += 1
    elif x < 0:
        negative.append(x)
    else:
        positive.append(x)

negative.sort()
positive.sort(reverse=True)

answer = 0
for i in range(0, len(positive) - 1, 2):
    answer += positive[i] * positive[i + 1]

rest_positive = 0
if len(positive) % 2 == 1:
    rest_positive = positive[-1]

for i in range(0, len(negative) - 1, 2):
    answer += negative[i] * negative[i + 1]

rest_negative = 0
if len(negative) % 2 == 1:
    rest_negative = negative[-1]

if isZero:
    # remove negative value <-- 0 * rest_negative
    answer += ones + rest_positive
else:
    answer += ones + rest_negative + rest_positive

print(answer)
profile
공부용 벨로그

0개의 댓글