백준|1744번|수 묶기

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
38/136

문제설명
이 문제는 처음에 n개의 수를 입력받습니다. 각각의 숫자들은 모두 단 한번만 곱하거나 곱하지 않아야하는데 이때 얻을수 있는 최대값을 출력하는 문제입니다.

작동 순서
1. 숫자들을 입력받고 0을 초과하는 숫자는 양수 리스트에 저장하고 0 이하의 숫자들은 음수 리스트에 저장합니다.
2. 각각의 리스트등을 정렬합니다.
3. 양수 리스트의 최대값과 그 다음으로 큰 수를 곱하여 sum에 더해주고 리스트에서 삭제합니다.
4. 양수 리스트에서 최대값이나 그 다음으로 큰 수가 1인 경우 남은 값들을 모두 sum에 더해주고 리스트에서 삭제합니다.
5. 음수 리스트에서 최소값과 그 다음으로 작은 수를 곱하여 sum에 더해주고 리스트에서 삭제합니다.
6. 음수 리스트의 숫자가 하나만 남을 경우 그 수를 sum에 더해주고 리스트에서 삭제합니다.
7. sum 값을 출력합니다.

소스코드

import sys
positive_num=[]
negative_num=[]
sum = 0
for i in range(int(sys.stdin.readline())):
    n = int(sys.stdin.readline())
    if n > 0:
        positive_num.append(n)
    else:
        negative_num.append(n)
positive_num.sort()
negative_num.sort()
while len(positive_num) > 0:
    if len(positive_num) > 1:
        if positive_num[-1] > 1 and positive_num[-2]>1:
            sum += positive_num.pop()*positive_num.pop()
        else:
            sum += positive_num.pop()
    else:
        sum += positive_num.pop()
while len(negative_num) > 0:
    if len(negative_num) > 1:
        sum += negative_num.pop(0)*negative_num.pop(0)
    else:
        sum+=negative_num.pop(0)
print(sum)

후기
다른 분들의 코드를 보니 확실히 저의 코드에 비해서 간결해보였습니다. 기초 문법과 코드 정리법을 좀 더 배워서 더 깔끔한 코드를 쓸 수 있도록 해야할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글