[ μ΄κ²μ΄ μ½λ©ν μ€νΈλ€ with νμ΄μ¬ ] Greedy κΈ°μΆλ¬Έμ
1. λͺ¨νκ° κΈΈλ
• λ¬Έμ
ν λ§μμ λͺ¨νκ°κ° Nλͺ μμ΅λλ€. λͺ¨νκ° κΈΈλμμλ Nλͺ μ λͺ¨νκ°λ₯Ό λμμΌλ‘ '곡ν¬λ'λ₯Ό μΈ‘μ νλλ°, '곡ν¬λ'κ° λμ λͺ¨νκ°λ μ½κ² 곡ν¬λ₯Ό λκ»΄ μν μν©μμ μ λλ‘ λμ²ν λ₯λ ₯μ΄ λ¨μ΄μ§λλ€.
λͺ¨νκ° κΈΈλμ₯μΈ λλΉμ΄λ λͺ¨νκ° κ·Έλ£Ήμ μμ νκ² κ΅¬μ±νκ³ μ 곡ν¬λκ° XμΈ λͺ¨νκ°λ λ°λμ Xλͺ μ΄μμΌλ‘ ꡬμ±ν λͺ¨νκ° κ·Έλ£Ήμ μ°Έμ¬ν΄μΌ μ¬νμ λ λ μ μλλ‘ κ·μ νμ΅λλ€. λλΉμ΄λ νλ λͺ κ°μ λͺ¨νκ° κ·Έλ£Ήμ λ§λ€ μ μλμ§ κΆκΈν©λλ€.
** λͺ¨λ λͺ¨νκ°λ₯Ό νΉμ ν κ·Έλ£Ήμ λ£μ νμλ μμ΅λλ€. **
• μ λ ₯쑰건
- 첫째 μ€μ λͺ¨νκ°μ μ Nμ΄ μ£Όμ΄μ§λ€. ( 1 ≤ N ≤ 100,000 )
- λμ§Έ μ€μλ κ° λͺ¨νκ°μ 곡ν¬λ κ°μ N μ΄νμ μμ°μλ‘ μ£Όμ΄μ§λ©°, κ° μμ°μλ 곡백μΌλ‘ ꡬλΆν©λλ€.
• μΆλ ₯쑰건
- μ¬νμ λ λ μ μλ κ·Έλ£Ή μμ μ΅λκ°μ μΆλ ₯ν©λλ€.
# λͺ¨νκ° κΈΈλ
n = int(input()) # λͺ¨νκ°μ μ
arr = list(map(int, input().split())) # λͺ¨νκ° κΈΈλμ 곡ν¬λ
arr.sort()
count= 0 # νμ¬ κ·Έλ£Ήμ ν¬ν¨λ λͺ¨νκ° μ
result = 0 # κ·Έλ£Ή μ
for i in arr:
count += 1
if count >= i:
result += 1
count = 0
print(result) # μ΄ κ·Έλ£Ή μ μΆλ ₯
2. κ³±νκΈ° νΉμ λνκΈ°
• λ¬Έμ
κ° μλ¦¬κ° μ«μ(0λΆν° 9)λ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄ Sκ° μ£Όμ΄μ‘μ λ, μΌμͺ½λΆν° μ€λ₯Έμͺ½μΌλ‘ νλμ© λͺ¨λ μ«μλ₯Ό νμΈνλ©° μ«μ μ¬μ΄μ 'x' νΉμ '+' μ°μ°μλ₯Ό λ£μ΄ κ²°κ³Όμ μΌλ‘ λ§λ€μ΄μ§ μ μλ κ°μ₯ ν° μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
λ¨, + λ³΄λ€ xλ₯Ό λ¨Όμ κ³μ°νλ μΌλ°μ μΈ λ°©μκ³Όλ λ¬λ¦¬, λͺ¨λ μ°μ°μ μΌμͺ½μμλΆν° μμλλ‘ μ΄λ£¨μ΄μ§λ€κ³ κ°μ ν©λλ€.
μλ₯Ό λ€μ΄ 02984λΌλ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ©΄, λ§λ€μ΄μ§ μ μλ κ°μ₯ ν° μλ ( ( ( ( 0 + 2 ) x 9 ) x 8 ) x 4 ) = 576 μ λλ€.
λν λ§λ€μ΄μ§ μ μλ κ°μ₯ ν° μλ νμ 20μ΅ μ΄νμ μ μκ° λλλ‘ μ λ ₯μ΄ μ£Όμ΄μ§λλ€.
• μ λ ₯쑰건
- 첫째 μ€μ μ¬λ¬ κ°μ μ«μλ‘ κ΅¬μ±λ νλμ λ¬Έμμ΄ Sκ° μ£Όμ΄μ§λλ€.
• μΆλ ₯쑰건
- 첫째 μ€μ λ§λ€μ΄μ§ μ μλ κ°μ₯ ν° μλ₯Ό μΆλ ₯ν©λλ€.
# κ³±νκΈ° νΉμ λνκΈ°
s = input()
arr = []
for i in s:
arr.append(int(i))
arr.sort()
result = arr[0]
for i in range(1, len(arr)):
if arr[i] <= 1 or result <= 1:
result += arr[i]
else:
result *= arr[i]
print(result)
3. λ¬Έμμ΄ λ€μ§κΈ°
• λ¬Έμ
λ€μμ΄λ 0κ³Ό 1λ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄ Sλ₯Ό κ°μ§κ³ μμ΅λλ€. λ€μμ΄λ μ΄ λ¬Έμμ΄ Sμ μλ λͺ¨λ μ«μλ₯Ό μ λΆ κ°κ² λ§λ€λ €κ³ ν©λλ€. λ€μμ΄κ° ν μ μλ νλμ Sμμ μ°μλ νλ μ΄μμ μ«μλ₯Ό μ‘κ³ λͺ¨λ λ€μ§λ κ²μ λλ€.
λ€μ§λ κ²μ 1μ 0μΌλ‘, 0μ 1λ‘ λ°κΎΈλ κ²μ μλ―Έν©λλ€.
μλ₯Ό λ€μ΄ S = 0001100 μΌ λ
1) μ 체λ₯Ό λ€μ§μΌλ©΄ 1110011
2) 4λ²μ§Έ λ¬ΈμλΆν° 5λ²μ§Έ λ¬ΈμκΉμ§ λ€μ§μΌλ©΄ 1111111μ΄ λμ΄μ λ λ²λ§μ λͺ¨λ κ°μ μ«μλ‘ λ§λ€ μ μμ΅λλ€.
λ¬Έμμ΄ Sκ° μ£Όμ΄μ‘μ λ, λ€μμ΄κ° ν΄μΌ νλ νλμ μ΅μνμλ₯Ό μΆλ ₯νμΈμ.
• μ λ ₯쑰건
- 첫째 μ€μ 0κ³Ό 1λ‘λ§ μ΄λ£¨μ΄μ§ λ¬Έμμ΄ Sκ° μ£Όμ΄μ§λλ€. Sμ κΈΈμ΄λ 100λ§λ³΄λ€ μμ΅λλ€.
• μΆλ ₯쑰건
- 첫째 μ€μ λ€μμ΄κ° ν΄μΌνλ νλμ μ΅μνμλ₯Ό μΆλ ₯ν©λλ€.
# λ¬Έμμ΄ λ€μ§κΈ°
# κ²½μ°μ μλ₯Ό μκ°ν΄μ κ°μ ν΄λ³΄κΈ°
data = input()
count0 = 0 # μ λΆ 0μΌλ‘ λ°κΎΈλ κ²½μ°
count1 = 0 # μ λΆ 1λ‘ λ°κΎΈλ κ²½μ°
if data[0] == '1': # 1μ΄λ©΄ 0μΌλ‘ λ°κΏμΌνκΈ° λλ¬Έμ
count0 += 1
else:
count1 += 1
for i in range(len(data)-1):
if data[i] != data[i+1]:
if data[i+1] == '1':
count0 += 1
else:
count1 += 1
print(min(count0, count1))
4. λ§λ€ μ μλ κΈμ‘
• λ¬Έμ
λλ€ νΈμμ μ£ΌμΈμΈ λλΉμ΄λ Nκ°μ λμ μ κ°μ§κ³ μμ΅λλ€. μ΄ λ Nκ°μ λμ μ μ΄μ©νμ¬ λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
μλ₯Ό λ€μ΄, N = 5μ΄κ³ , κ° λμ μ΄ κ°κ° 3μ, 2μ, 1μ, 1μ, 9μμ§λ¦¬ (ννλ¨μ) λμ μ΄λΌκ³ κ°μ ν©μλ€. μ΄ λ λλΉμ΄κ° λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ 8μμ λλ€.
λ λ€λ₯Έ μμλ‘, N = 3μ΄κ³ , κ° λμ μ΄ κ°κ° 3μ, 5μ, 7μμ§λ¦¬ (ννλ¨μ) λμ μ΄λΌκ³ κ°μ ν©μλ€. μ΄λ λλΉμ΄κ° λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ 1μμ λλ€.
• μ λ ₯쑰건
- 첫째 μ€μλ λμ μ κ°μλ₯Ό λνλ΄λ μμ μ μ Nμ΄ μ£Όμ΄μ§λλ€.
- λμ§Έ μ€μλ κ° λμ μ νν λ¨μλ₯Ό λνλ΄λ Nκ°μ μμ°μκ° μ£Όμ΄μ§λ©°, κ° μμ°μλ 곡백μΌλ‘ ꡬλΆν©λλ€.
• μΆλ ₯쑰건
- 첫째 μ€μ μ£Όμ΄μ§ λμ λ€λ‘ λ§λ€ μ μλ μμ μ μ κΈμ‘ μ€ μ΅μκ°μ μΆλ ₯ν©λλ€.
n = int(input())
data = list(map(int, input().split()))
data.sort()
target = 1
for x in data:
if target < x:
break
target += x
print(target)
5. λ³Όλ§κ³΅ κ³ λ₯΄κΈ°
• λ¬Έμ
A, B λ μ¬λμ΄ λ³Όλ§μ μΉκ³ μμ΅λλ€. λ μ¬λμ μλ‘ λ¬΄κ²κ° λ€λ₯Έ λ³Όλ§κ³΅μ κ³ λ₯΄λ €κ³ ν©λλ€. λ³Όλ§κ³΅μ μ΄ Nκ°κ° μμΌλ©° κ° λ³Όλ§κ³΅λ§λ€ 무κ²κ° μ νμκ³ , 곡μ λ²νΈλ 1λ²λΆν° μμλλ‘ λΆμ¬λ©λλ€.
λν κ°μ 무κ²μ κ³΅μ΄ μ¬λ¬ κ° μμ μ μμ§λ§, μλ‘ λ€λ₯Έ 곡μΌλ‘ κ°μ£Όν©λλ€. λ³Όλ§κ³΅μ 무κ²λ 1λΆν° MκΉμ§μ μμ°μ ννλ‘ μ‘΄μ¬ν©λλ€.
μλ₯Ό λ€μ΄ Nμ΄ 5μ΄κ³ Mμ΄ 3μ΄λ©° κ°κ°μ 무κ²κ° μ°¨λ‘λλ‘ 1, 3, 2, 3, 2μΌ λ κ° κ³΅μ λ²νΈκ° μ°¨λ‘λλ‘ 1λΆν° 5λ²κΉμ§ λΆμ¬λ©λλ€. μ΄ λ λμ¬λμ΄ κ³ λ₯Ό μ μλ λ³Όλ§κ³΅μ λ²νΈ μ‘°ν©μ ꡬνλ©΄ λ€μκ³Ό κ°μ΅λλ€.
κ²°κ³Όμ μΌλ‘ λ μ¬λμ΄ κ³΅μ κ³ λ₯΄λ κ²½μ°μ μλ 8κ°μ§ μ λλ€. Nκ°μ 곡μ 무κ²κ° κ°κ° μ£Όμ΄μ§ λ, λ μ¬λμ΄ λ³Όλ§κ³΅μ κ³ λ₯΄λ κ²½μ°μ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
• μ λ ₯쑰건
- 첫째 μ€μ λ³Όλ§κ³΅μ κ°μ N, 곡μ μ΅λ λ¬΄κ² Mμ΄ κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ κ°κ° μμ°μ ννλ‘ μ£Όμ΄μ§λλ€.
- λμ§Έ μ€μ κ° λ³Όλ§κ³΅μ λ¬΄κ² Kκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μμλλ‘ μμ°μ ννλ‘ μ£Όμ΄μ§λλ€.
• μΆλ ₯쑰건
- 첫째 μ€μ λ μ¬λμ΄ λ³Όλ§κ³΅μ κ³ λ₯΄λ κ²½μ°μ μλ₯Ό μΆλ ₯ν©λλ€.
import itertools
n, m = map(int, input().split())
arr = list(map(int, input().split()))
a = 0
b = 0
for i in itertools.combinations(arr, 2):
if list(i)[0] == list(i)[1]:
b += 1
a += 1
print(a-b)
μ€μ μ½ν μμ μ‘°ν© λΌμ΄λΈλ¬λ¦¬λ₯Ό μΈ μ μλμ§ λͺ¨λ₯΄κΈ°μ μμ λ΅μλ μΆκ°νλ€.
# λ³Όλ§κ³΅ κ³ λ₯΄κΈ° λ΅μ
n, m = map(int, input().split())
data = list(map(int, input().split()))
# 1λΆν° 10κΉμ§ 무κ²λ₯Ό λ΄μ μ μλ 리μ€νΈ
array = [0] * 11
for x in data:
# κ° λ¬΄κ²μ ν΄λΉνλ λ³Όλ§κ³΅μ κ°μ μΉ΄μ΄νΈ
array[x] += 1
result = 0
# 1λΆν° mκΉμ§μ κ° λ¬΄κ²μ λνμ¬ μ²λ¦¬
for i in range(1, m+1):
n -= array[i] # 무κ²κ° iμΈ λ³Όλ§κ³΅μ κ°μ (Aκ° μ νν μ μλ κ°μ) μ μΈ
result += array[i] * n # Bκ° μ ννλ κ²½μ°μ μμ κ³±νκΈ°
print(result)
6. 무μ§μ λ¨Ήλ°© λΌμ΄λΈ
• λ¬Έμ
νμ μμμ΄ μμ±ν 무μ§λ μμ μ μ¬λ₯μ λ½λ΄κ³ μΆμ΄ μ‘κ³ κ³ λ―Ό λμ μΉ΄μΉ΄μ€ TV λΌμ΄λΈλ‘ λ°©μ‘μ νκΈ°λ‘ λ§μλ¨Ήμλ€.
κ·Έλ₯ λ¨Ήλ°©μ νλ©΄ λ€λ₯Έ λ°©μ‘κ³Ό μ°¨λ³μ±μ΄ μκΈ° λλ¬Έμ 무μ§λ μλμ κ°μ΄ λ νΉν λ°©μμ μκ°ν΄λλ€.
무μ§λ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μμμ μμ·¨νλ€.
- 무μ§λ 1λ² μμλΆν° λ¨ΉκΈ° μμνλ©°, νμ νμ λ²νΈκ° μ¦κ°νλ μμλλ‘ μμμ λ¬΄μ§ μμΌλ‘ κ°μ Έλ€ λλλ€.
- λ§μ§λ§ λ²νΈμ μμμ μμ·¨ν νμλ νμ νμ μν΄ λ€μ 1λ² μμμ΄ λ¬΄μ§ μμΌλ‘ μ¨λ€.
- 무μ§λ μμ νλλ₯Ό 1μ΄ λμ μμ·¨ν ν λ¨μ μμμ κ·Έλλ‘ λκ³ , λ€μ μμμ μμ·¨νλ€.
- λ€μ μμμ΄λ, μμ§ λ¨μ μμ μ€ λ€μμΌλ‘ μμ·¨ν΄μΌ ν κ°μ₯ κ°κΉμ΄ λ²νΈμ μμμ λ§νλ€.
- νμ νμ΄ λ€μ μμμ λ¬΄μ§ μμΌλ‘ κ°μ Έμ€λλ° κ±Έλ¦¬λ μκ°μ μλ€κ³ κ°μ νλ€.
무μ§κ° λ¨Ήλ°©μ μμν μ§ K μ΄ νμ λ€νΈμν¬ μ₯μ λ‘ μΈν΄ λ°©μ‘μ΄ μ μ μ€λ¨λμλ€.
무μ§λ λ€νΈμν¬ μ μν ν λ€μ λ°©μ‘μ μ΄μ΄κ° λ, λͺ λ² μμλΆν° μμ·¨ν΄μΌ νλμ§λ₯Ό μκ³ μ νλ€.
κ° μμμ λͺ¨λ λ¨Ήλλ° νμν μκ°μ΄ λ΄κ²¨μλ λ°°μ΄ food_times, λ€νΈμν¬ μ₯μ κ° λ°μν μκ° K μ΄κ° 맀κ°λ³μλ‘ μ£Όμ΄μ§ λ λͺ λ² μμλΆν° λ€μ μμ·¨νλ©΄ λλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±νλΌ.
μ νμ¬ν
- food_times λ κ° μμμ λͺ¨λ λ¨Ήλλ° νμν μκ°μ΄ μμμ λ²νΈ μμλλ‘ λ€μ΄μλ λ°°μ΄μ΄λ€.
- k λ λ°©μ‘μ΄ μ€λ¨λ μκ°μ λνλΈλ€.
- λ§μ½ λ μμ·¨ν΄μΌ ν μμμ΄ μλ€λ©΄ -1μ λ°ννλ©΄ λλ€.
μ νμ± ν μ€νΈ μ ν μ¬ν
- food_times μ κΈΈμ΄λ 1 μ΄μ 2,000 μ΄νμ΄λ€.
- food_times μ μμλ 1 μ΄μ 1,000 μ΄νμ μμ°μμ΄λ€.
- kλ 1 μ΄μ 2,000,000 μ΄νμ μμ°μμ΄λ€.
ν¨μ¨μ± ν μ€νΈ μ ν μ¬ν
- food_times μ κΈΈμ΄λ 1 μ΄μ 200,000 μ΄νμ΄λ€.
- food_times μ μμλ 1 μ΄μ 100,000,000 μ΄νμ μμ°μμ΄λ€.
- kλ 1 μ΄μ 2 x 10^13 μ΄νμ μμ°μμ΄λ€.
μ μΆλ ₯ μ
food_times [ 3, 1, 2 ]
k 5
result 1
- 0~1μ΄ λμμ 1λ² μμμ μμ·¨νλ€. λ¨μ μκ°μ [2,1,2] μ΄λ€.
- 1~2μ΄ λμ 2λ² μμμ μμ·¨νλ€. λ¨μ μκ°μ [2,0,2] μ΄λ€.
- 2~3μ΄ λμ 3λ² μμμ μμ·¨νλ€. λ¨μ μκ°μ [2,0,1] μ΄λ€.
- 3~4μ΄ λμ 1λ² μμμ μμ·¨νλ€. λ¨μ μκ°μ [1,0,1] μ΄λ€.
- 4~5μ΄ λμ (2λ² μμμ λ€ λ¨ΉμμΌλ―λ‘) 3λ² μμμ μμ·¨νλ€. λ¨μ μκ°μ [1,0,0] μ΄λ€.
- 5μ΄μμ λ€νΈμν¬ μ₯μ κ° λ°μνλ€. 1λ² μμμ μμ·¨ν΄μΌ ν λ μ€λ¨λμμΌλ―λ‘, μ₯μ 볡ꡬ νμ 1λ² μμλΆν° λ€μ λ¨ΉκΈ° μμνλ©΄ λλ€.
import heapq
def solution(food_times, k):
# μμμ λ€ λ¨Ήμ κ²½μ° λ λ¨Ήμ κ²μ΄ μμ λ
if sum(food_times) <= k:
return -1
q = []
for i in range(len(food_times)):
# (μμμκ°, μμ λ²νΈ) ννλ‘ μ°μ μμ νμ μ½μ
heapq.heappush(q, (food_times[i], i+1))
sum_value = 0 # λ¨ΉκΈ° μν΄ μ¬μ©ν μκ°
previous = 0 # μ§μ μ λ€ λ¨Ήμ μμ μκ°
length = len(food_times) # λ¨μ μμ κ°μ
while sum_value + ((q[0][0] - previous)*length) <= k:
now = heapq.heappop(q)[0]
sum_value += (now-previous) * length
length -= 1
previous = now # μ΄μ μμ μκ° μ¬μ€μ
result = sorted(q, key = lambda x : x[1]) # μμ λ²νΈ κΈ°μ€μΌλ‘ μ λ ¬
return result[(k-sum_value)%length][1]