12주차 #1744 수 묶기

Yona·2021년 11월 11일
1

🍕 baekjoon

목록 보기
16/31

🦋 문제

💬 처음 든 생각

두 수의 곱에서 가장 큰 값이 나오려면
가장 큰 수들을 곱하는게 제일 큰 곱이 나온다.
ex) 1~16일때 16*15 가 가장 큰 곱
그러므로 내림차순 정렬한 다음 큰 수보다

다만 예외로, 음수는

  • 1순위) 음수끼리 묶음
  • 2순위) 다른 음수가 없다면 0과 묶음
  • 3순위 ) 음수, 0이 모두 없으면 양수와 묶지 않아야한다

1은 그냥 더하는게 이득이다

✨ 처음 짠 코드

N = int(input())
pos  = [] # 양수저장
neg = [] # 음수저장
result = 0

for _ in range(N):
  n = int(input())
  if n > 1:
    pos.append(n)
  elif n == 1:
    result += 1 # 1은 그냥 더해준다 
  else:
    neg.append(n)

pos.sort(reverse=True) 
neg.sort() 


# 양수
if len(pos) % 2 == 0: # 양수가 짝수개 일경우 두개씩 곱하기
  for i in range(0, len(pos), 2):
    result += pos[i] * pos[i+1]
else:
  for i in range(0, len(pos)-1, 2): 
    result += pos[i] * pos[i+1]
  result += pos[len(pos)-1] # 마지막 수는 그냥 더함

# 음수
if len(neg) % 2 == 0: # 음수가 짝수개 일경우 두개씩 곱하기
  for i in range(0, len(neg), 2):
    result += neg[i] * neg[i+1]
else:
  for i in range(0, len(neg)-1, 2):
    result += neg[i] * neg[i+1]
  result += neg[len(neg)-1] # 마지막 수는 그냥 더함

print(result)

오예

profile
Sometimes you win, sometimes you learn 🏃‍♀️

0개의 댓글