Notice
Recent Posts
Link
Today
Total
10-06 02:35
관리 메뉴

dingdong coding

[ μ½”λ“œμ—… ] Greedy λ³Έλ¬Έ

πŸ”΅Coding Test/CodeUp

[ μ½”λ“œμ—… ] Greedy

🐢 개발개발 🐾 2022. 2. 13. 15:18
 

λ¬Έμ œμ§‘ / 그리디

 

codeup.kr

 

[ 2001 ] μ΅œμ†Œ λŒ€κΈˆ

β€» 문제

파파 νŒŒμŠ€νƒ€ κ°€κ²ŒλŠ” 점심 μΆ”μ²œ νŒŒμŠ€νƒ€μ™€ 생과일 μ₯¬μŠ€ μ„ΈνŠΈ 메뉴가 인기가 μ’‹λ‹€. 이 μ„ΈνŠΈ 메뉴λ₯Ό μ£Όλ¬Έν•˜λ©΄ κ·Έ λ‚ μ˜ 3 μ’…λ₯˜μ˜ νŒŒμŠ€νƒ€μ™€ 2 μ’…λ₯˜μ˜ 생과일 μ₯¬μŠ€μ—μ„œ ν•˜λ‚˜μ”© μ„ νƒν•œλ‹€. νŒŒμŠ€νƒ€μ™€ 생과일 μ₯¬μŠ€μ˜ 가격 ν•©κ³„μ—μ„œ 10%λ₯Ό λ”ν•œ κΈˆμ•‘μ΄ λŒ€κΈˆλœλ‹€. μ–΄λŠ λ‚ μ˜ νŒŒμŠ€νƒ€μ™€ 생과일 μ₯¬μŠ€μ˜ 가격이 μ£Όμ–΄ μ‘Œμ„ λ•Œ, κ·Έ λ‚  μ„ΈνŠΈ λ©”λ‰΄μ˜ λŒ€κΈˆμ˜ μ΅œμ†Œκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ.

 

β€» μž…λ ₯

μž…λ ₯은 5 ν–‰μœΌλ‘œ 이루어지며, ν•œ 쀄에 ν•˜λ‚˜μ”© μ–‘μ˜ μ •μˆ˜κ°€ μ ν˜€μžˆλ‹€.

1ν–‰μ˜ μ •μˆ˜λŠ” 첫 번째 νŒŒμŠ€νƒ€ 가격이닀.

2ν–‰μ˜ μ •μˆ˜λŠ” 두 번째 νŒŒμŠ€νƒ€ 가격이닀.

3ν–‰μ˜ μ •μˆ˜λŠ” μ„Έ 번째 νŒŒμŠ€νƒ€ 가격이닀.

4ν–‰μ˜ μ •μˆ˜λŠ” 첫 번째 생과일 μ₯¬μŠ€ 가격이닀.

5ν–‰μ˜ μ •μˆ˜λŠ” 두 번째 생과일 μ₯¬μŠ€μ˜ 가격이닀.

(λͺ¨λ“  νŒŒμŠ€νƒ€μ™€ 생과일 μ₯¬μŠ€μ˜ 가격은 100 원이상 2000원 μ΄ν•˜μ΄λ‹€.)

 

β€» 좜λ ₯ 

κ·Έλ‚  μ„ΈνŠΈ λ©”λ‰΄μ˜ μ΅œμ†Œ λŒ€κΈˆμ„ μ†Œμˆ˜ μ²«μ§Έμžλ¦¬κΉŒμ§€ 좜λ ₯ν•˜μ‹œμ˜€.

# μ΅œμ†ŒλŒ€κΈˆ
pasta = []
p = 3

juice = []
j = 2

for i in range(p):
    pasta.append(int(input()))
pasta_min = min(pasta)

for i in range(2):
    juice.append(int(input()))
juice_min = min(juice)

result = (pasta_min + juice_min) * 1.1
result_cal = round(result, 2)

print(result_cal)

μž…λ ₯ 

800

700

900

198

330

 

좜λ ₯ 

987.8

 

[ 3120 ] λ¦¬λͺ¨μ»¨

β€» 문제

μ»΄ν“¨ν„°μ‹€μ—μ„œ μˆ˜μ—… 쀑인 정보 μ„ μƒλ‹˜μ€ λƒ‰λ‚œλ°©κΈ°μ˜ μ˜¨λ„λ₯Ό μ‘°μ ˆν•˜λ €κ³  ν•œλ‹€.

λƒ‰λ‚œλ°©κΈ°κ°€ 멀리 μžˆμ–΄μ„œ 리λͺ¨μ»¨μœΌλ‘œ μ‘°μž‘ν•˜λ €κ³  ν•˜λŠ”λ°, 리λͺ¨μ»¨μ˜ μ˜¨λ„ 쑰절 λ²„νŠΌμ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

1) μ˜¨λ„λ₯Ό 1도 μ˜¬λ¦¬λŠ” λ²„νŠΌ

2) μ˜¨λ„λ₯Ό 1도 λ‚΄λ¦¬λŠ” λ²„νŠΌ

3) μ˜¨λ„λ₯Ό 5도 μ˜¬λ¦¬λŠ” λ²„νŠΌ

4) μ˜¨λ„λ₯Ό 5도 λ‚΄λ¦¬λŠ” λ²„νŠΌ

5) μ˜¨λ„λ₯Ό 10도 μ˜¬λ¦¬λŠ” λ²„νŠΌ

6) μ˜¨λ„λ₯Ό 10도 λ‚΄λ¦¬λŠ” λ²„νŠΌ

 

이와 같이 총 6개의 λ²„νŠΌμœΌλ‘œ λͺ©ν‘œ μ˜¨λ„λ₯Ό μ‘°μ ˆν•΄μ•Ό ν•œλ‹€.

ν˜„μž¬ μ„€μ • μ˜¨λ„μ™€ λ³€κ²½ν•˜κ³ μžν•˜λŠ” λͺ©ν‘œ μ˜¨λ„κ°€ 주어지면 이 λ²„νŠΌλ“€μ„ μ΄μš©ν•˜μ—¬ λͺ©ν‘œ μ˜¨λ„λ‘œ λ³€κ²½ν•˜κ³ μž ν•œλ‹€.

이 λ•Œ λ²„νŠΌ λˆ„λ¦„μ˜ μ΅œμ†Œ 횟수λ₯Ό κ΅¬ν•˜μ‹œμ˜€.

 

예λ₯Ό λ“€μ–΄, 7λ„μ—μ„œ 34λ„λ‘œ λ³€κ²½ν•˜λŠ” 경우,

7 -> 17 -> 27 -> 32 -> 33 -> 34

μ΄λ ‡κ²Œ 총 5번 λˆ„λ₯΄λ©΄ λœλ‹€.

 

β€» μž…λ ₯

ν˜„μž¬ μ˜¨λ„a 와 λͺ©ν‘œ μ˜¨λ„bκ°€ μž…λ ₯λœλ‹€. ( 0 <= a , b <= 40 )

 

β€» 좜λ ₯ 

μ΅œμ†Œν•œμ˜ λ²„νŠΌ μ‚¬μš©μœΌλ‘œ λͺ©ν‘œμ˜¨λ„κ°€ λ˜λŠ” λ²„νŠΌμ˜ 횟수λ₯Ό 좜λ ₯ν•œλ‹€.

# 리λͺ¨μ»¨
a, b = map(int, input().split())
c = abs(a-b)
count = 0

while c != 0:
    if c >= 10:
        c -= 10
        count += 1
    else:
        if c > 7:
            c += 1
            count += 1
        elif c > 4:
            c -= 5
            count += 1
        elif c > 2:
            c += 1
            count += 1
        else:
            c -= 1
            count += 1

print(count)

μž…λ ₯

7 34

 

좜λ ₯ 

5

 

[ 3310 ] κ±°μŠ€λ¦„λˆ

β€» 문제

μ–΄λ–€ κ°€κ²Œμ˜ μš•μ‹¬μŸμ΄ 점원은 κ±°μŠ€λ¦„λˆμ„ λ‚˜λˆ μ€„λ•Œ κ±°μŠ€λ¦„λˆμ˜ 개수λ₯Ό μ κ²Œν•΄μ„œ 주고자 ν•œλ‹€.

κ±°μŠ€λ¦„λˆμ„ μž…λ ₯ λ°›μ•„ 점원이 쀄 수 μžˆλŠ” μ΅œμ†Œ κ±°μŠ€λ¦„λˆμ˜ 개수λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

예λ₯Ό λ“€μ–΄ 54520원인 경우,

κ±°μŠ€λ¦„λˆμœΌλ‘œ 50000μ›κΆŒ 1μž₯, 1000μ›κΆŒ 4μž₯, 500원 1개, 10원 2개 ν•΄μ„œ 총 8κ°œμ΄λ‹€.

(β€» ν˜„μž¬ μš°λ¦¬λ‚˜λΌκ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ” 화폐λ₯Ό μ‚¬μš©ν•œλ‹€. 10원 50원 100원 500원 1,000원 5,000원 10,000원 50,000원)

 

β€» μž…λ ₯

κ±°μŠ€λ¦„λˆ n이 μž…λ ₯λœλ‹€. ( n은10μ΄μƒμ˜  int λ²”μœ„ )

 

β€» 좜λ ₯ 

μ΅œμ†Œ κ±°μŠ€λ¦„λˆμ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

# κ±°μŠ€λ¦„ 돈
n = int(input())
count = 0

# 큰 λ‹¨μœ„μ˜ 화폐뢀터 μ°¨λ‘€λŒ€λ‘œ ν™•μΈν•˜κΈ°
array = [50000, 10000, 5000, 1000, 500, 100, 50, 10]

for coin in array:
    count += n // coin  # ν•΄λ‹Ή ν™”νλ‘œ 거슬러 쀄 수 μžˆλŠ” λ™μ „μ˜ 개수 μ„ΈκΈ°  // : λͺ« μ—°μ‚°μž
    n %= coin  # % : λ‚˜λ¨Έμ§€ μ—°μ‚°μž

print(count)

μž…λ ₯

54520

 

좜λ ₯ 

8

 

[ 3321 ] 졜고의 ν”Όμž

β€» 문제

vega μ„ μƒλ‹˜μ€ Miss ν”Όμž κ°€κ²Œμ˜ 단골 μ†λ‹˜μ΄λ‹€.

κ·ΈλŠ” 이번 달뢀터 μ ˆμ•½ μƒν™œμ„ μ‹œμž‘ν–ˆλ‹€.

κ·Έλž˜μ„œ κ·ΈλŠ” ν”Όμž κ°€κ²Œμ—μ„œ μ£Όλ¬Έν•  수 μžˆλŠ” ν”Όμž 쀑 1 λ‹¬λŸ¬ λ‹Ή μ—΄λŸ‰μ΄ μ΅œλŒ€κ°€ λ˜λŠ” ν”Όμžλ₯Ό μ£Όλ¬Έν•˜κ³  μ‹Άμ–΄ν•œλ‹€.

μ΄λŸ¬ν•œ ν”Όμžλ₯Ό "졜고의 ν”Όμž"라고 λΆ€λ₯΄κΈ°λ‘œ ν•˜μž.

"졜고의 ν”Όμž"λŠ” 1μ’…λ₯˜κ°€ μ•„λ‹ˆλ‹€.

Miss ν”ΌμžλŠ” N μ’…λ₯˜μ˜ ν† ν•‘μ—μ„œ μ—¬λŸ¬ μ’…λ₯˜λ₯Ό 자유둭게 μ„ νƒν•˜μ—¬, λ„μš° μœ„μ— 올렀 μ£Όλ¬Έν•  μˆ˜μžˆλ‹€.

같은 토핑을 2 개 이상 올릴 수 μ—†λ‹€.

λ„μš°μ— 토핑을 ν•˜λ‚˜λ„ ν•˜μ§€ μ•Šμ€  ν”Όμžλ„ μ£Όλ¬Έν•  μˆ˜μžˆλ‹€.

λ„μš°μ˜ 가격은 A λ‹¬λŸ¬μ΄λ©°, ν† ν•‘μ˜ 가격은 λͺ¨λ‘ B λ‹¬λŸ¬μ΄λ‹€.

μ‹€μ œ ν”Όμž 가격은 λ„μš°μ˜ 가격과 ν† ν•‘ κ°€κ²©μ˜ 합계이닀.

즉, 토핑을 k μ’…λ₯˜ (0 ≦ k ≦ N) ν•œ ν”Όμžμ˜ 가격은 A + k × B 원이닀.

ν”Όμž μ „μ²΄μ˜ μΉΌλ‘œλ¦¬λŠ” λ„μš° μ—΄λŸ‰κ³Ό ν† ν•‘ 칼둜리의 합계이닀.

λ„μš°μ˜ 가격과 ν† ν•‘μ˜ 가격, 그리고 λ„μš°μ™€ 각 ν† ν•‘ μ—΄λŸ‰ 값이 μ£Όμ–΄ μ‘Œμ„ λ•Œ, "졜고의 ν”Όμž"의 1 λ‹¬λŸ¬ λ‹Ή μ—΄λŸ‰μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

β€» μž…λ ₯

첫 번째 μ€„μ—λŠ” ν† ν•‘ μ’…λ₯˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•˜λ‚˜μ˜ μ •μˆ˜ N (1 ≦ N ≦ 100)이 μž…λ ₯λœλ‹€.

두 번째 μ€„μ—λŠ” 두 개의 μ •μˆ˜ A, B (1 ≦ A ≦ 1000,1 ≦ B ≦ 1000)κ°€ 곡백을 κ΅¬λΆ„μœΌλ‘œ μž…λ ₯λœλ‹€. AλŠ” λ„μš°μ˜ 가격, BλŠ” ν† ν•‘μ˜ 가격을 λ‚˜νƒ€λ‚Έλ‹€.

μ„Έ 번째 μ€„μ—λŠ” λ„μš°μ˜ 칼둜리λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ C (1 ≦ C ≦ 10000)κ°€ μž…λ ₯λœλ‹€.

3 + i ν–‰ (1 ≦ i ≦ N)λŠ” i 번째의 ν† ν•‘ 칼둜리 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Di (1 ≦ Di ≦ 10,000)κ°€ μž…λ ₯λœλ‹€.

 

β€» 좜λ ₯ 

"졜고의 ν”Όμž" 1 λ‹¬λŸ¬ λ‹Ή μ—΄λŸ‰μ˜ 수λ₯Ό μ†Œμˆ˜μ  μ΄ν•˜λŠ” 버리고 μ •μˆ˜λ‘œ 좜λ ₯ν•œλ‹€.

# 졜고의 ν”Όμž
import math
n = int(input()) # ν† ν•‘ μ’…λ₯˜ 수
a, b = map(int, input().split()) # a: λ„μš° 가격, b : ν† ν•‘ 가격
c = int(input()) # λ„μš° 칼둜리
array = []
kal_array = []

for i in range(n):
    m = int(input())
    array.append(m)

array.sort()
array.reverse()

pizza = c / a
kal = c
k = 0

for i in array:
    c += i
    k += 1
    result = c/(a+(b*k))
    if pizza <= result:
        pizza = result
    else:
        break

print(math.trunc(pizza))

μž…λ ₯

3

12 2

200

50

300

100

 

좜λ ₯ 

37

 

Comments