-
[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