λ¬Έμ
μΈμ€μ΄λ λμκ΄μμ μΌνλ€. λμκ΄μ κ°λ°©μκ°μ΄ λλμ μΈμ€μ΄λ μ¬λλ€μ΄ λ§κ΅¬ λμ μ± μ λ€μ κ°μ Έλ€ λμμΌ νλ€. μΈμ€μ΄λ νμ¬ 0μ μκ³ , μ¬λλ€μ΄ λ§κ΅¬ λμ μ± λ μ λΆ 0μ μλ€. κ° μ± λ€μ μλ μμΉκ° μ£Όμ΄μ§ λ, μ± μ λͺ¨λ μ μ리μ λλ λ λλ μ΅μ κ±Έμ μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€. μΈμ€μ΄λ ν κ±Έμμ μ’ν 1μΉΈμ© κ°λ©°, μ± μ μλ μμΉλ μ μ μ’νμ΄λ€. μ± μ λͺ¨λ μ μ리μ λλ νμλ λ€μ 0μΌλ‘ λμμ¬ νμλ μλ€. κ·Έλ¦¬κ³ μΈμ€μ΄λ ν λ²μ μ΅λ MκΆμ μ± μ λ€ μ μλ€.
μ λ ₯
첫째 μ€μ μ± μ κ°μ Nκ³Ό, μΈμ€μ΄κ° ν λ²μ λ€ μ μλ μ± μ κ°μ Mμ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ μ± μ μμΉκ° μ£Όμ΄μ§λ€. Nκ³Ό Mμ 50λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. μ± μ μμΉλ 0μ΄ μλλ©°, μ λκ°μ 10,000λ³΄λ€ μκ±°λ κ°μ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ λ΅μ μΆλ ₯νλ€.
λ¬Έμ νμ΄
import sys
from collections import deque
n,m=map(int, sys.stdin.readline().strip().split(' '))
books=list(map(int, sys.stdin.readline().strip().split(' ')))
books.sort()
# μ λκ°μ΄ κ°μ₯ ν° μΈλ±μ€κ° μμμΈμ§ μμμΈμ§?
maxidx=0
if abs(books[-1])>abs(books[0]):
maxidx=-1
plus=deque()
minus=deque()
for book in books:
if book>0:
plus.append(book)
else:
minus.append(book)
# μμ μμ κΈ°μ€ μ΅μ λ°μκ΅ κ΅¬νκΈ°
ans_minus=0
mod_minus=len(minus)%m
step=0
if minus and len(minus)<=m:
if minus[0]==books[maxidx]:
ans_minus+=abs(minus[0])
else:
ans_minus+=abs(minus[0])*2
else:
if mod_minus != 0:
for _ in range(mod_minus):
step = minus.pop()
ans_minus += (abs(step) * 2)
while minus:
if len(minus) <= m:
if minus[0] == books[maxidx]:
ans_minus += abs(minus[0])
break
for _ in range(m):
step = minus.pop()
ans_minus += (abs(step) * 2)
# μμ μμ κΈ°μ€ μ΅μ λ°μκ΅ κ΅¬νκΈ°
ans_plus=0
mod_plus=len(plus)%m
step=0
if plus and len(plus)<=m:
if plus[-1]==books[maxidx]:
ans_plus+=plus[-1]
else:
ans_plus+=plus[-1]*2
else:
if mod_plus != 0:
for _ in range(mod_plus):
step = plus.popleft()
ans_plus += (step * 2)
while plus:
if len(plus) <= m:
if plus[-1] == books[maxidx]:
ans_plus += plus[-1]
break
for _ in range(m):
step = plus.popleft()
ans_plus += (step * 2)
print(ans_plus+ans_minus)
- μ± μ λͺ¨λ μ μ리μ λ μ΄νμ λ€μ 0μΌλ‘ λμμ¬ νμκ° μμΌλ―λ‘, μ λκ°μ΄ κ°μ₯ ν° μμΉμ μλ μ± μ λ§μ§λ§μ μ²λ¦¬ν΄μ λ€μ λμμ€λ κ±Έμμ μΆκ°ν΄μ£Όμ§ μμμΌ νλ€.
- μ°μ μ λ ₯λ°μ μ± λ€μ μμΉλ₯Ό μ λ ¬ν΄μ€λ€.
- μ λκ°μ΄ ν° μκ° κ°μ₯ μΌμͺ½ μμΈμ§, κ°μ₯ μ€λ₯Έμͺ½ μμΈμ§ λΉκ΅νκ³ , κ²°κ³Όλ₯Ό maxidxμ 0(μΌμͺ½) λλ -1(μ€λ₯Έμͺ½)μΌλ‘ μ μ₯ν΄μ€λ€.
- λ§μ§λ§ μ± μ κ°μ Έλ€ λ κ²½μ°λ₯Ό μ μΈνκ³ μ± μ κ°μ Έλ€ λκ³ λ€μ 0μΌλ‘ λμμμΌ νκΈ° λλ¬Έμ 0μ μ€μ¬μΌλ‘ μλ€μ μ΄ν΄λ³΄λ©΄μ μμμΈ κ°λ€μ λ°λ‘ μ μ₯νκ³ , μμμΈ κ°λ€μ λ°λ‘ μ μ₯ν΄μ κ°κ° μ΅μ κ±Έμμ ꡬνκ³ λνλ©΄ λλ€.
- μμμ μμ κ°κ°μ κ°μκ° mμΌλ‘ λλ μ§μ§ μλ κ²½μ°, mμΌλ‘ λλ λλ¨Έμ§λ§νΌμ κ°μ₯ κ±°λ¦¬κ° κ°κΉμ΄ μμλλ‘ μ²λ¦¬ν΄μ£Όκ³ , λ¨μ μ± λ€μ ν λ²μ μ²λ¦¬ν μ μλ mκΆμ© μ κ±°ν΄μ£Όλ©΄μ λͺ κ±Έμμ λ€λ μμΌ νλμ§ κ³μ°νλ€.
λ¬Έμ μμ 1,2,3λ²μ κΈ°μ€μΌλ‘ μμλ₯Ό λ€μ΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
'μκ³ λ¦¬μ¦ > Greedy' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 21758 π₯] κΏ λ°κΈ° (2) | 2023.11.30 |
---|---|
[λ°±μ€ 1931 π₯] νμμ€ λ°°μ (0) | 2023.11.30 |
[λ°±μ€ 20310 π₯] νλ Έμ€ (0) | 2023.10.16 |
[λ°±μ€ 11501 π₯] μ£Όμ (0) | 2023.10.07 |
[λ°±μ€ 2138 π₯] μ ꡬμ μ€μμΉ (0) | 2023.08.01 |