티스토리 뷰
728x90
https://www.acmicpc.net/problem/1744
- 해설 :
수열 N이 주어질 때 이 수열의 합을 구하려고 한다. 이 때, 두 수를 위치에 상관없이 묶어 이 두 수는 곱해서 더할 수 있다고 한다. 이 조건에서 수열 합의 최댓값을 구하는 문제이다.
- 풀이 :
쉬운 문제이다. 주어진 수열을 음수와 양수로 분리한 후 (0은 음수로, 1은 따로 카운팅)
음수는 작은 값에서부터 2개씩 묶고 양수는 큰 값에서부터 2개씩 묶는다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
N = int(input())
nums = []
for i in range(N):
nums.append(int(input()))
negative=[]
positive=[]
ans=0
for num in nums:
if num<=0: #0도 negative의 원소로 둔다.
negative.append(num)
elif num==1:
ans+=1 #숫자가 1인 경우에는 묶지 않으므로, 미리 계산하여 둔다.
elif num>1:
positive.append(num)
# 목적에 맞게 정렬
negative.sort()
positive.sort(reverse=True)
# 1) 작은 수부터 차례대로 묶는다.
for i in range(0,len(negative),2):
if i+1 < len(negative):
ans += negative[i]*negative[i+1]
else:
ans += negative[i]
# 2) 큰 수부터 차례대로 묶는다.
for i in range(0,len(positive),2):
if i+1 < len(positive):
ans += positive[i]*positive[i+1]
else:
ans += positive[i]
print(ans)
|
cs |
320x100
'Algorithm > Greedy' 카테고리의 다른 글
(Python) - BOJ(1783번) : 병든 나이트 (0) | 2022.01.28 |
---|---|
(Python) - BOJ(1758번) : 알바생 강호 (0) | 2022.01.28 |
(Python) - BOJ(1700번) : 멀티탭 스케줄링 (0) | 2022.01.27 |
(Python) - BOJ(1541번) : 잃어버린 괄호 (0) | 2022.01.27 |
(Python) - BOJ(1449번) : 수리공 항승 (0) | 2022.01.26 |
댓글
© 2022 WonSeok, All rights reserved