[BOJ-1744] 수 묶기(Python)

yuseon Lim·2021년 7월 19일
0

Problem Solving

목록 보기
37/37
post-thumbnail

🤒 문제

BOJ-1744 수 묶기

💊 풀이

몇가지만 주의해서 의식의 흐름대로 코드를 짜면 된다.

  • 0, 1일때는 곱하는것보다 더하는게 더 크다.
  • 음수는 음수*음수 끼리 곱해주어야 한다.
  • 따라서 음수는 음수*음수가 크려면 절댓값이 큰것끼리 곱해야 더 크므로
  • 음수는 오름차순, 양수는 내림차순으로 곱한다.
  • 나는 모든걸 오름차순으로 정렬하고 양수는 홀짝을 판단해 홀수면 작은거 하나 빼고 끼리끼리 곱해주어 더해주었다.
  • 음수가 홀수개라면 음수 하나는 0과 곱해 준다. (0이 있다면)

그렇게 어려운 문제는 아닌데 생각보다 변수?가 많아서 오래 걸렸다.
반례를 스스로 생각해내면 좋지만 본인의 코드가 주어진 예제는 잘 나오는데 제출하면 어딘가에서 자꾸 틀린다면 여기에서 반례를 하나씩 해보고 뭐가 문제인지 찾아보면 될 것 같다.

✨ 소스코드

import sys
from collections import deque

def add_nums(nums, add):
    tmp = 0

    for i in range(0, len(nums) - 1, 2):
        # 둘 다 양수이거나 음수인 경우 곱해서 더함
        if nums[i] * nums[i + 1] > 0:
            tmp += nums[i] * nums[i + 1]
        else:
            tmp += (nums[i] + nums[i + 1])

    if len(nums) % 2 != 0:
        n = nums.pop()
        if n < 0 and 0 in add:
            n = 0
        tmp += n
    
    return tmp

N = int(input())


result = 0
add = []
nums = []
negative = []
positive = []

for _ in range(N):
    n = int(sys.stdin.readline())
    if n == 0 or n == 1:
        add.append(n)
    else:
        nums.append(n)

result += sum(add)

# 음수는 오름차순, 양수는 내림차순으로 정렬
for i, n in enumerate(nums):
    if n < 0: negative.append(n)
    else: positive.append(n)

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

result += add_nums(negative, add)
result += add_nums(positive, add)

print(result)

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥

0개의 댓글