문제설명
이 문제는 처음에 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)
후기
다른 분들의 코드를 보니 확실히 저의 코드에 비해서 간결해보였습니다. 기초 문법과 코드 정리법을 좀 더 배워서 더 깔끔한 코드를 쓸 수 있도록 해야할 것 같습니다.