๐Ÿ˜ข ๋ฐฑ์ค€ 1339 : ๋‹จ์–ด ์ˆ˜ํ•™

3Juhwanยท2021๋…„ 2์›” 28์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
20/23

1744: ์ˆ˜ ๋ฌถ๊ธฐ

Greedy ๋ฌธ์ œ์ด๋‹ค.
์•„์ด๋””์–ด๋Š” ๋ฐ”๋กœ ์ƒ๊ฐ๋‚˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทผ๋ฐ ์ข€ ํ—ค๋งธ๋‹ค. ๐Ÿ˜ฅ๐Ÿ˜ฅ


๐Ÿ“Œ Try 1

from collections import deque

# ๋นˆ ํ ๋งŒ๋“ค๊ธฐ
N = int(input())
inputArr = list()
for _ in range(N):
  inputArr.append(int(input()))
  
inputArr.sort()
nums, _sum = deque(inputArr), 0

# plus
while len(nums) >= 2 and nums[-1] > 0:
  n2, n1 = nums.pop(), nums.pop()
  if n2 <= 0:
      nums.append(n1)
      nums.append(n2)
      break
  elif n1 <= 0:
      nums.append(n1)
      _sum += n2
      break
  _sum += n1 * n2
  
  # print(_sum, nums)
  
if nums and nums[-1] > 0:
  _sum += nums.pop()
# print('middle', _sum, nums)

# minus
while len(nums) >= 2:
  n1, n2 = nums.popleft(), nums.popleft()
  _sum += n1 * n2
  # print(_sum, nums)

if nums:
  _sum += nums.pop()

print(_sum)

์ฝ”๋“œ๊ฐ€ ์•„์ฃผ์•„์ฃผ ๋”๋Ÿฝ๋‹ค..
๋จธ๋ฆฌ ์•„ํŒŒ์„œ ๋Œ€์ถฉ ํ’€๊ณ  ๋„˜๊ธฐ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ‹€๋ ธ๋‹ค.


๐Ÿ“Œ Try 2

from collections import deque

N = int(input())
minusArr, plusArr, _sum = list(), list(), 0
for _ in range(N):
    n = int(input())
    if n > 0:
        plusArr.append(n)
    else:
        minusArr.append(n)
        
plusArr.sort()
minusArr.sort(reverse=True)

while len(plusArr) >= 2:
  n1, n2 = plusArr.pop(), plusArr.pop()
  _sum += n1 * n2

if plusArr:
  _sum += plusArr.pop()
  
while len(minusArr) >= 2:
  n1, n2 = minusArr.pop(), minusArr.pop()
  _sum += n1 * n2

if minusArr:
  _sum += minusArr.pop()

print(_sum)

์ด๋ฒˆ์—” ์–‘์ˆ˜, 0, ์Œ์ˆ˜๋ฅผ ๋‹ด๋Š” list๋ฅผ ๋”ฐ๋กœ ๋‹ด์•„์„œ ํ’€์—ˆ๋‹ค.

๊น”๋”ํ•˜๊ฒŒ ํ’€์—ˆ๊ณ , ๋‹น์—ฐํžˆ ์ •๋‹ต์ผ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๋–ด๋‹ค.


๐Ÿ“Œ Try 3

from collections import deque

N = int(input())
minusArr, plusArr, _sum = list(), list(), 0
for _ in range(N):
    n = int(input())
    if n > 1:
        plusArr.append(n)
    elif n == 1:
        _sum += 1
    else:
        minusArr.append(n)
        
plusArr.sort()
minusArr.sort(reverse=True)

while len(plusArr) >= 2:
  n1, n2 = plusArr.pop(), plusArr.pop()
  _sum += n1 * n2

if plusArr:
  _sum += plusArr.pop()
  
while len(minusArr) >= 2:
  n1, n2 = minusArr.pop(), minusArr.pop()
  _sum += n1 * n2

if minusArr:
  _sum += minusArr.pop()

print(_sum)

๋„์ €ํžˆ ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ถ„ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

๋ฌธ์ œ์  :

1์€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ ์—†์ด ๋ฐ”๋กœ ๋”ํ•ด์•ผ ๊ฐ€์žฅ ํ•ฉ์ด ์ปค์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ Try 2 ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋‹ˆ๊นŒ ๋งž์•˜์Šต๋‹ˆ๋‹ค!!๊ฐ€ ๋–ด๋‹ค.


๐ŸŽ Reference

profile
Codeforces์™€ USACO ํ’€์ด๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€๋„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€