Notice
Recent Posts
Link
Today
Total
10-06 02:35
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] Greedy ๋ณธ๋ฌธ

๐Ÿ”ตCoding Test/Algorithm

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] Greedy

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 2. 8. 03:41

๊ทธ๋ฆฌ๋”” (ํƒ์š•๋ฒ•)

: ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•

 

1. ๊ฑฐ์Šค๋ฆ„๋ˆ (์˜ˆ์ œ)

2. ํฐ ์ˆ˜์˜ ๋ฒ•์น™ (์‹ค์ „๋ฌธ์ œ)

3. ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„ (์‹ค์ „๋ฌธ์ œ)

4. 1์ด ๋  ๋•Œ๊นŒ์ง€ (์‹ค์ „๋ฌธ์ œ)

 

[ ์˜ˆ์ œ 1 ] ๊ฑฐ์Šค๋ฆ„๋ˆ

โ€ป ๋ฌธ์ œ
์นด์šดํ„ฐ์—๋Š” ๊ฑฐ์Šค๋ฆ„๋ˆ์œผ๋กœ ์‚ฌ์šฉํ•  500์›,100์›,50์›,10์›์งœ๋ฆฌ ๋™์ „์ด ๋ฌดํ•œํžˆ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์†๋‹˜์—๊ฒŒ ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋ˆ์ด N์›์ผ ๋•Œ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผํ•  ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ.

๋‹จ N์€ ํ•ญ์ƒ 10์˜ ๋ฐฐ์ˆ˜์ด๋‹ค.

# ๊ฑฐ์Šค๋ฆ„ ๋ˆ
n = 1260
count = 0

# ํฐ ๋‹จ์œ„์˜ ํ™”ํ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•˜๊ธฐ
array = [500, 100, 50, 10]

for coin in array:
    count += n // coin  # ํ•ด๋‹น ํ™”ํ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ  // : ๋ชซ ์—ฐ์‚ฐ์ž
    n %= coin  # % : ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž

print(count)

์ถœ๋ ฅ    6  

 

[ ์‹ค์ „๋ฌธ์ œ ] ํฐ ์ˆ˜์˜ ๋ฒ•์น™ 

โ€ป ๋ฌธ์ œ

๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ์ฃผ์–ด์ง„ ์ˆ˜๋“ค์„ M๋ฒˆ ๋”ํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์น™ 

๋‹จ, ๋ฐฐ์—ด์˜ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋”ํ•ด์งˆ ์ˆ˜ ์—†๋‹ค.

๋ฐฐ์—ด์˜ ํฌ๊ธฐ N, ์ˆซ์ž๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜ M, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋™๋นˆ์ด์˜ ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค 

# ํฐ ์ˆ˜์˜ ๋ฒ•์น™ (์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ)
n, m, k = map(int, input().split())
a = list(map(int, input().split()))

a.sort()
a.reverse()

renew = [a[0], a[1]]

result = 0

while m >= 1:
    for i in range(k):
        result += int(renew[0])
        m -= 1
    result += int(renew[1])
    m -= 1

print(result)

 

์ž…๋ ฅ   

5 8 3  

2 4 5 4 6 

 

์ถœ๋ ฅ    46  

 

--- ํ’€์ด ํ•ด์„ค ---

# ํฐ ์ˆ˜์˜ ๋ฒ•์น™ (ํ’€์ดํ•ด์„ค1)
# N, M, K ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m, k = map(int, input().split())
# N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
data = list(map(int, input().split()))

data.sort()  # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋“ค ์ •๋ ฌ 
first = data[n - 1] # ๊ฐ€์žฅ ํฐ ์ˆ˜
second = data[n - 2] # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜

result = 0

while True:
    for i in range(k): # ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ K๋ฒˆ ๋”ํ•˜๊ธฐ
        if m == 0: # m์ด 0 ์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ
            break
        result += first
        m -= 1
    if m == 0 :
        break
    result += second # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋”ํ•˜๊ธฐ
    m -= 1 # ๋”ํ•  ๋•Œ๋งˆ๋‹ค 1์”ฉ ๋นผ๊ธฐ

print(result)
# ํฐ ์ˆ˜์˜ ๋ฒ•์น™ (ํ’€์ดํ•ด์„ค2)
# N, M, K ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m, k = map(int, input().split())
# N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
data = list(map(int, input().split()))

data.sort()  # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋“ค ์ •๋ ฌ
first = data[n - 1]  # ๊ฐ€์žฅ ํฐ ์ˆ˜
second = data[n - 2]  # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜

# ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜ ๊ณ„์‚ฐ
count = int(m / (k + 1)) * k
count += m % (k + 1)

result = 0
result += (count) * first  # ๊ฐ€์žฅ ํฐ ์ˆ˜ ๋”ํ•˜๊ธฐ
result += (m - count) * second

print(result)

 

[ ์‹ค์ „๋ฌธ์ œ ] ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„ 

โ€ป ๋ฌธ์ œ

์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ์ค‘์—์„œ ์ž๋‹น ๋†’์€ ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ ํ•œ ์žฅ์„ ๋ฝ‘๋Š” ๊ฒŒ์ž„์ด๋‹ค.

๋‹จ, ๊ฒŒ์ž„์˜ ๋ฃฐ์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

 

1. ๋ฝ‘๊ณ ์ž ํ•˜๋Š” ์นด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ–‰์„ ์„ ํƒ 2. ๊ทธ ๋‹ค์Œ ์„ ํƒ๋œ ํ–‰์— ํฌํ•จ๋œ ์นด๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•จ3. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ์นด๋“œ๋ฅผ ๊ณจ๋ผ๋‚ผ ํ–‰์„ ์„ ํƒํ•  ๋•Œ, ์ดํ›„์— ํ–‰์—์„œ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž์˜ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋„๋ก ์ „๋žต ์„ธ์šฐ๊ธฐ 

 

์นด๋“œ๋“ค์ด N (ํ–‰) x M (์—ด) ํ˜•ํƒœ๋กœ ๋†“์—ฌ ์žˆ์„ ๋•Œ, ๊ฒŒ์ž„์˜ ๋ฃฐ์— ๋งž๊ฒŒ ์นด๋“œ๋ฅผ ๋ฝ‘๋Š ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค. 

# ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„
n, m = map(int, input().split())

result = 0

for i in range(n):
    data = list(map(int, input().split()))
    min_value = min(data)
    result = max(0, min_value)

print(result)

์ž…๋ ฅ   

3 3

3 1 2

4 1 4

2 2 2 

 

์ถœ๋ ฅ    2  

 

[ ์‹ค์ „๋ฌธ์ œ ] 1์ด ๋  ๋•Œ๊นŒ์ง€ 

โ€ป ๋ฌธ์ œ

์–ด๋– ํ•œ ์ˆ˜ N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์˜ ๋‘ ๊ณผ์ • ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋‹จ, ๋‘ ๋ฒˆ์งธ ์—ฐ์‚ฐ์€ N์ด K๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ ๋•Œ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. N์—์„œ 1์„ ๋บ€๋‹ค.

2. N์„ K๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

N๊ณผ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ 1๋ฒˆ ํ˜น์€ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

# 1์ด ๋  ๋•Œ๊นŒ์ง€ (์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ)
n, k = input().split()
n = int(n)
k = int(k)
min = 0

while n >= k:
    while n % k != 0:
        n = n - 1
        min += 1
    n //= k
    min += 1

print(min)
# 1์ด ๋  ๋•Œ๊นŒ์ง€ (ํ’€์ด ํ•ด์„ค)
n, k = map(int, input().split())
result = 0  # 1, 2

while True:
    # N์ด K๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€๋งŒ 1์”ฉ ๋นผ๊ธฐ
    target = (n // k) * k  # 25 , 5, 1
    result += (n - target)  # 25 -25 = 0, 5-5 = 0 1-1 =0
    n = target  # 25, 5, 1
    # N์ด K๋ณด๋‹ค ์ž‘์„ ๋•Œ (๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์„ ๋•Œ) ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ
    if n < k:  # 25, 5, 1
        break
    # K๋กœ ๋‚˜๋ˆ„๊ธฐ
    result += 1
    n //= k  # 25//5 = 5 , 5//5 = 1

# ๋งˆ์ง€๋ง‰ ์œผ๋กœ ๋‚จ์€ ์ˆ˜์— ๋Œ€ํ•˜์—ฌ 1์”ฉ ๋นผ๊ธฐ
result += (n - 1)  # 3-1
print(result)  # 2
# 1์ด ๋  ๋•Œ๊นŒ์ง€
n, k = map(int, input().split())

result = 0

while True:
    if n % k != 0:
        n -= 1
        result += 1
    else:
        n = n / k
        result += 1
    if n == 1:
        break

print(result)

์ž…๋ ฅ  

25 5

 

์ถœ๋ ฅ    2  

Comments