ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 1744 수묶기
    Algorithm/백준 2022. 12. 28. 21:22

    1. 문제 📚

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

    2. 입출력 예 📋

    3. 알고리즘 ✅

    - 최대가 나오기 위해선

     

    음수에서

    경우의 수 1) 음수 * 음수

    경우의 수 2) 음수 + 음수

    경우의 수 3) 음수 * 0

    경우의 수 4) 음수

     

    4가지 중에 최대 값을 

     

    양수는 

    경우의 수 1) 양수 * 양수 

    경우의 수 2) 양수 + 양수 

    경우의 수 3) 양수

     

    3가지 중에 최대 값을 더해야한다

     

    따라서 인풋을 따로 따로 받아주어 모든 경우의 수를 따져준당

    4. 소스코드 💻

     

    import sys
    
    input = sys.stdin.readline
    
    N = int(input().strip())
    
    negative_arr = []
    zero_arr = []
    positive_arr = []
    
    for i in range(N):
        num = int(input().strip())
        if num < 0:
            negative_arr.append(num)
        elif num == 0:
            zero_arr.append(num)
        else:
            positive_arr.append(num)
    
    positive_arr.sort()
    negative_arr.sort(reverse = True)
    
    answer = 0
    
    while negative_arr:
        max_num = 0
        num = negative_arr.pop()
        another_index = -1
        zero_flag = False
    
        for i in range(len(negative_arr)):
            # 경우의 수1)
            if num * negative_arr[i] > num + negative_arr[i]:
                another_index = i
                max_num = num * negative_arr[i]
            # 경우의 수2)
            else:
                max_num = num
                another_index = -1
    
        # 경우의 수3) 음수 상쇄
        for i in range(len(zero_arr)):
            if max_num <= num * 0:
                zero_flag = True
    
        if zero_flag:
            answer += 0
            zero_arr.pop()
        # 겅우의 수4) 묶이지 않는 경우
        elif another_index == -1:
            answer += num
        # 두 수로 묶이는 경우
        else:
            answer += max_num
            negative_arr.pop(another_index)
    
    while positive_arr:
        num = positive_arr.pop()
        another_index = -1
        max_num = 0
    
        for i in range(len(positive_arr)):
            # 경우의 수1)
            if positive_arr[i] * num > positive_arr[i] + num:
                another_index = i
                max_num = positive_arr[i] * num
            # 경우의 수2)
            else:
                another_index = i
                max_num = positive_arr[i] + num
    
        # 경우의 수3) 묶이지 않는 경우
        if another_index == -1:
            answer += num
        # 두 수로 묶이는 경우
        else:
            answer += max_num
            positive_arr.pop(i)
    
    print(answer)

    'Algorithm > 백준' 카테고리의 다른 글

    [Python] 1759 암호 만들기  (0) 2023.01.18
    [Python] 3190 뱀  (1) 2023.01.18
    [Python] 1541 잃어버린 괄호  (0) 2022.12.27
    [Python] 2309 일곱 난쟁이  (0) 2021.10.15
    [Python] 백준 11650 - 좌표 정렬하기  (0) 2021.10.12

    댓글

Designed by Tistory.