백준 1744번 수 묶기 파이썬

박슬빈·2021년 9월 9일
1

알고리즘

목록 보기
8/40

문제

입력 , 출력

solution

import sys

input = sys.stdin.readline
n = int(input())
parr = []
marr = []
res = 0
for i in range(n):
    a = int(input())
    if a == 1:
        res += 1
    elif a > 0:
        parr.append(a)
    else:
        marr.append(a)
parr.sort()
marr.sort(reverse=True)
while len(parr) != 0:
    if len(parr) == 1:
        res += parr.pop()
    else:
        res += parr.pop() * parr.pop()
while len(marr) != 0:
    if len(marr) == 1:
        res += marr.pop()
    else:
        res += marr.pop() * marr.pop()
print(res)

설명

입력 값이 1일경우 곱하면 오히려 다음수에 곱하지 못해서 괄호를 하지않고 바로 결과값에 1을 더하고
0보다 크면 parr 에 넣고
0보다 같거나 작을경우에는 marr에 넣는다
parr는 오름차순 정렬을 해서 젤끝에부터 , pop을 2번 실행해서 곱해주고
parr의 길이 len이 1이 되었을경우에는 pop을 한번 실행해서 더해준다
그리고 marr는 내림차순으로 정렬했는데 오름차순으로 정렬했을경우에는
-7 -5 -1 으로 정렬되기 때문에 내림차순으로 정렬했다.
그리고 0 이 있을경우에는 마이너스 일 경우에는 가장 작은 값을 곱해주는게
값이 더 커진다.

후기

처음에는 marr를 오름차순으로 정렬해서 0의 갯수만큼 곱해줬는데
굳이 그럴 필요없이 marr를 내림차순으로 0을 가장 작은값과 곱해지도록 했다.
힌트를 살짝 보았지만 접근 자체는 괜찮았던 것 같다.
그리디도 조금씩 문제가 풀리는것 같은 기분이다...

profile
이것저것합니다

0개의 댓글