[백준]1744 수 묶기

ganta·2021년 3월 24일
0

알고리즘 문제해결

목록 보기
12/24

✔️ 문제 링크

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

💡 핵심 아이디어

1️⃣ 0, 1숫자를 유심히 고려 해 보아야 한다.
0은 곱해주면 음수를 제거 할 수 있는 수로 사용이 가능
1은 양수와 곱해주면 오히려 값이 줄어듬으로 그냥 있는 수대로 더해주는 것이 최대이다.
이에 따라, 1보다 작은 수와 1보다 큰 수로 나눠준다.

2️⃣ 1보다 작은 수는 오름차순 순으로 쌍을 지어주며 곱해주고 최종 답에 더해준다.

3️⃣ 1보다 큰 수는 내림차순 순으로 쌍을 지어주며 곱해주고 최종 답에 더해준다.

4️⃣ 1이 나온 수 만큼 최종 답에 더해준다.

⭐️ 소스 코드

if __name__ == '__main__':
    N = int(input())
    num_arr = [int(input()) for _ in range(N)]
    arr1 = [i for i in num_arr if i > 1]
    arr2 = [i for i in num_arr if i < 1]
    ans = 0
    one_check = num_arr.count(1)

    arr1.sort(key=lambda x: -x)
    arr2.sort(key=lambda x: x)

    if len(arr1) == 1:
        ans += arr1[-1]
    else:
        for i in range(0, len(arr1), 2):
            if i == len(arr1) - 1:
                break
            ans += (arr1[i] * arr1[i + 1])

        if len(arr1) % 2 == 1:
            ans += arr1[-1]

    if len(arr2) == 1:
        ans += arr2[-1]
    else:
        for i in range(0, len(arr2), 2):
            if i == len(arr2) - 1:
                break
            ans += (arr2[i] * arr2[i + 1])
        if len(arr2) % 2 == 1:
            ans += arr2[-1]

    ans += one_check

    print(ans)
profile
한걸음씩 꾸준히

0개의 댓글