BOJ 1461 : λμκ΄ (Python)
λ¬Έμ
https://www.acmicpc.net/problem/1461
1461λ²: λμκ΄
μΈμ€μ΄λ λμκ΄μμ μΌνλ€. λμκ΄μ κ°λ°©μκ°μ΄ λλμ μΈμ€μ΄λ μ¬λλ€μ΄ λ§κ΅¬ λμ μ± μ λ€μ κ°μ Έλ€ λμμΌ νλ€. μΈμ€μ΄λ νμ¬ 0μ μκ³ , μ¬λλ€μ΄ λ§κ΅¬ λμ μ± λ μ λΆ 0μ μλ€. κ° μ±
www.acmicpc.net
μ½λ
νμ΄μ λ Όλ¦¬λ λ§μΌλ νλ¦° μ½λμ΄λ€. νλ¦° μ΄μ μ μ λ΅ μ½λλ κ°μ₯ μλμμ !
import sys
from collections import deque
n, k = map(int,sys.stdin.readline().split())
init = list(map(int,sys.stdin.readline().split()))
init.sort()
array = deque(init)
count = 0
pivot = -1
diff = max(abs(array[0]),abs(array[len(array)-1]))
for i in range(len(array)-1):
if array[i]<0 and array[i+1]>0:
pivot = i
break
i = len(array)-1
while i > pivot:
count += abs(array[len(array)-1]) * 2
for j in range(k):
i -= 1
array.pop()
if i<=pivot:
break
i = 0
while i <= pivot:
count += abs(array[0]) * 2
for j in range(k):
i += 1
array.popleft()
if i > pivot:
break
print(count-diff)
νμ΄
init 리μ€νΈμ μ± μμΉ κ°μ λ£μ΄μ sort νλ€. κ·Έλ¦¬κ³ init 리μ€νΈλ₯Ό deque λ‘ λ³νν κ²μ΄ arrayμ΄λ€.
→ pop()κ³Ό popleft()λ₯Ό μ΄μ©νκΈ° μν΄μ
β» κ΅³μ΄ popleft()λ₯Ό μ°κΈ° μν΄ dequeμΌλ‘ λ³ννκΈ° 보λ€λ μμ, μμ 리μ€νΈλ₯Ό λλμ΄μ μμλ sortλ₯Ό reverseλ‘ νλ©΄ λ μ΄ν΄νκΈ° μ¬μΈ κ² κ°λ€.
# pivot = -1 (pivot μ΄κΈ°κ°μ -1λ‘ μ€μ )
for i in range(len(array)-1):
if array[i]<0 and array[i+1]>0:
pivot = i
break
μμμ μμλ₯Ό ꡬλΆνκΈ° μν΄μ pivot κ°μ μ€μ νλ€.
μλ₯Ό λ€μ΄ 리μ€νΈμ -5 -4 -3 6 7 μ΄ μμΌλ©΄ pivotμ 2(-3μ΄ μλ μΈλ±μ€)κ° λλ€. → μ μ«μμ μΈλ±μ€λ₯Ό κΈ°μ€μΌλ‘ ν¨
diff = max(abs(array[0]),abs(array[len(array)-1]))
κ°μ₯ λ©λ¦¬ μλ μ± μ μ볡νλ©΄ μν΄μ΄λ―λ‘ λ§μ§λ§μ μ 리νκ³ λλ΄λ κ²μ΄ μ΄λμ΄λ€.
κ·Έλμ μ΄κΈ°μ diff λ³μμ array μ€μμ μ λκ°μ΄ κ°μ₯ ν° κ°μ μ μ₯ν΄λλ€.
arrayλ μ λ ¬μ΄ λΌ μλ μνμ΄λ―λ‘ κ°μ₯ μΌμͺ½μ μ λκ°κ³Ό κ°μ₯ μ€λ₯Έμͺ½μ μ λκ°λ§ λΉκ΅λ₯Ό νλ©΄ λλ€.
i = len(array)-1
while i > pivot:
count += abs(array[len(array)-1]) * 2
for j in range(k):
i -= 1
array.pop()
if i<=pivot:
break
λ¨Όμ pivotμ μ€λ₯Έμͺ½μ μλ μμλΆν° μμνλ€. (μμ μμ)
κ°μ₯ μ€λ₯Έμͺ½μμλΆν° μΌμͺ½μΌλ‘ μ§νλλ€.
count μ ν΄λΉ μΈλ±μ€μ μλ μμμ μ λκ°μ μ μ₯ν ν forλ¬Έμ μ΄μ©ν΄ μΈμ€μ΄κ° λ€ μ μλ μ± κΆμλ§νΌμ μμλ₯Ό ν¨μ€νλ€.
→ λ λ©λ¦¬ μλ μ± μ κ½μλκ³ μμ μΌλ‘ λμμ€λ κΈΈμ ν¨κ» λ€κ³ μ¨ μ± λ€μ μ 리νλ©΄μ μ¬ μ μκΈ° λλ¬Έμ΄λ€.
pivotμ μΌμͺ½μ μλ μμλ λ§μ°¬κ°μ§λ‘ μ§ννλ€. (μμ μμ)
μ΄λ²μλ κ°μ₯ μΌμͺ½μμλΆν° μ€λ₯Έμͺ½μΌλ‘ μ§ννλ€. → μ λκ°μ΄ ν° μμλλ‘μ
μ μ½λκ° νλ¦° μ΄μ μ μ λ΅ μ½λ
import sys
from collections import deque
n, k = map(int,sys.stdin.readline().split())
init = list(map(int,sys.stdin.readline().split()))
init.sort()
array = deque(init)
count = 0
pivot = -1
diff = max(abs(array[0]),abs(array[len(array)-1]))
for i in range(len(array)-1):
if array[i]<0 and array[i+1]>0:
pivot = i
break
i = len(array)-1
#μλμ ifλ¬Έμ λ£μ΄μ€μΌ μ€λ₯ λ°μ X
if pivot== -1 and array[0] < 0:
pivot = len(array)-1
while i > pivot:
count += abs(array[len(array)-1]) * 2
for j in range(k):
i -= 1
array.pop()
if i<=pivot:
break
i = 0
while i <= pivot:
count += abs(array[0]) * 2
for j in range(k):
i += 1
array.popleft()
if i > pivot:
break
print(count-diff)
μ 체 μ«μκ° μμμΈ κ²½μ°μμ μλ μ½λλΌλ©΄ pivotμ -1λ‘ κ·Έλλ‘ λ¨μμμ΄μ while i > pivot μ κ±°μ³μΌνλλ° μ΄ whileλ¬Έμ μλ μμ μμΉλ€μ μν κ²μ΄λ―λ‘ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ§ννλ€. μ΄μ λ°ν΄ μμλ€μ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μ§νν΄μΌνλ―λ‘ μ€λ₯κ° λ°μν κ²μ΄λ€.
κ·Έλμ pivot μ΄ -1 μ΄κ³ arrayμ 첫 μμκ° μμλΌλ©΄ (== μ± μ μμΉκ° λͺ¨λ μμλΌλ©΄) pivotμ len(array)-1 λ‘ λ³κ²½ν΄μ 첫λ²μ§Έ whileλ¬Έμ κ±°μΉμ§ μκ³ μλμ whileλ¬Έμμ μ§νν μ μλλ‘ νλ€.