1744-バンドル
📚 1744-バンドル
バンドル
理解する
私のような人は、すべての状況が条件通りに処理されていますが、これは悪い方法だと気づきました.
✔¥は良い解決策として
負数は昇順、正数は降順、1は乗算
(0は負数になります.)
ソース
最初の私のソース
import sys
read = sys.stdin.readline
n = int(read())
arr = []
minus_cnt = 0
for _ in range(n):
d = int(read())
arr.append(d)
if d < 0: minus_cnt += 1
arr.sort()
result = 0
before = 0
cnt = 1
zero_check = False
check = False
for i in range(n - 1, -1, -1):
# print("i : ", i, " arr : ", arr[i])
# 양수일 때
if arr[i] > 0:
# 1에 도착할 시
if arr[i] == 1:
result += 1
before = 0
# cnt가 홀 수일 때
elif cnt % 2:
before = arr[i]
result += before
else:
result += (before * arr[i])
result -= before
before = 0
cnt += 1
# 0일 때
elif arr[i] == 0:
# 음수자리가 홀 수이면 0이 존재한다면 곱해줘야 한다.
if minus_cnt % 2 != 0:
zero_check = True
else:
if not check:
check = True
cnt = 0
# 만약 남은 음수들이 홀 수개라면
if minus_cnt % 2 != 0:
# 0이 존재한다면
if zero_check:
result += 0 * arr[i]
else:
result += arr[i]
else:
# 남은게 짝수라면
cnt = 1
before = arr[i]
else:
if cnt % 2:
before = arr[i]
else:
result += (before * arr[i])
before = 0
cnt += 1
print(result)
良いソリューションのソース
import sys
read = sys.stdin.readline
n = int(read())
arr = []
# 음수, 양수, 1 리스트 만들기
minus_list = []
plus_list = []
one_list = []
ans = 0
# 입력 값 받기
for i in range(n):
input_num = int(input())
if input_num > 1:
plus_list.append(input_num)
elif input_num <= 0:
minus_list.append(input_num)
else:
one_list.append(input_num)
plus_list.sort(reverse=True)
minus_list.sort()
# 양수 계산
# 양수의 개수가 홀수라면 제일 작은 값을 정답에 더하기
if len(plus_list) % 2 == 1:
ans += plus_list[len(plus_list)-1]
for j in range(0, len(plus_list)-1,2):
ans += plus_list[j] * plus_list[j+1]
# 양수의 개수가 짝수면 두 수를 곱하고 정답에 더하기
else:
for j in range(0, len(plus_list), 2):
ans += plus_list[j] * plus_list[j+1]
# 음수 계산(0 포함)
# 음수의 개수가 홀수라면 제일 작은 값을 정답에 더하기
if len(minus_list) % 2 == 1:
ans += minus_list[len(minus_list)-1]
for j in range(0, len(minus_list)-1, 2):
ans += (minus_list[j]) * (minus_list[j+1])
# 음수의 개수가 짝수면 두 수를 곱하고 정답에 더하기
else:
for j in range(0, len(minus_list), 2):
ans += (minus_list[j]) * (minus_list[j + 1])
# 수 1에 대한 계산
for j in range(len(one_list)):
ans += one_list[j]
# 정답 출력
print(ans)
採点結果
良い解決策の事件源の結果
リファレンス
Reference
この問題について(1744-バンドル), 我々は、より多くの情報をここで見つけました https://velog.io/@chang626/1744-수-묶기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol