728x90
반응형
https://www.acmicpc.net/problem/1744
1744번: 수 묶기
길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에
www.acmicpc.net
문제 해결
1보다 큰 양수는 더하는 것 보다 곱하는 것이 이득
1은 더하는 것이 이득
0은 아무런 영향이 없지만 음수가 있을때 음수를 곱해주면 0을 만들 수 있다.
음수는 음수끼리 곱하면 양수가 된다.
우선순위 큐를 통해 1보다 큰 양수, 음수를 따로 리스트를 분리해서 배열한 후 그 안에서 각각 절대값이 큰 것끼리 곱한다.
양수 리스트에 수가 남으면 더한다.
음수 리스트에 수가 남았고 0인 수가 있으면 곱해서 0으로 만든다. (없으면 더한다.)
CODE
import sys
import heapq
n = int(input())
p = []
m = []
one = 0
zero = 0
for i in range(n):
x = int(input())
if x == 1:
one +=1
elif x == 0:
zero += 1
elif x>=2:
heapq.heappush(p,-x)
else:
heapq.heappush(m,x)
ans = one
while len(p)>1:
a = heapq.heappop(p)
b = heapq.heappop(p)
ans += a*b
while len(m)>1:
a = heapq.heappop(m)
b = heapq.heappop(m)
ans += a*b
if len(p):
r1 = heapq.heappop(p)
ans += abs(r1)
if len(m):
if zero==0:
r2 = heapq.heappop(m)
ans += r2
print(ans)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 1747 소수&팰린드롬 (0) | 2023.02.23 |
---|---|
[python] 백준 1456 거의 소수 (0) | 2023.02.23 |
[python] 백준 1715 카드 정렬하기 (0) | 2023.02.23 |
[python] 백준 2343 기타 레슨 (0) | 2023.02.23 |
[python] 백준 2023 신기한 소수 (0) | 2023.02.22 |
댓글