๐Ÿ“š Study/Algorithm

[Algorithm] ๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์œฐ๊ฐฑ 2024. 6. 26. 05:50

# 1. ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ์„ ํƒํ•˜๋Š” ๊ทธ๋ฆฌ๋””

๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜

: ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋œป์€, 'ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•'์„ ์˜๋ฏธํ•œ๋‹ค.
๋”ฐ๋ผ์„œ, ๋งค์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๊ฒŒ ๋˜๋ฉฐ, ํ˜„์žฌ์˜ ์„ ํƒ์ด ๋ฏธ๋ž˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.


๋”ฐ๋ผ์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ '์ •๋‹น์„ฑ ๋ถ„์„'์ด ์ค‘์š”ํ•˜๋‹ค.

๋‹จ์ˆœํžˆ ํ˜„์žฌ best๋ฅผ ์„ ํƒํ•ด๋„ ๊ทธ๊ฒŒ ์ตœ์ ์˜ ํ•ด๊ฐ€ ๋˜๋Š”์ง€ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์†Œ๋ฆฌ์ด๋‹ค!

 

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฌธ์ œ์œ ํ˜•์€

'์‚ฌ์ „์— ์™ธ์šฐ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ ์œ ํ˜•'์ด๋‹ค.

๋ฐ˜๋ฉด ์ดํ›„์— ๊ณต๋ถ€ํ•  ์ •๋ ฌ, ์ตœ๋‹จ ๊ฒฝ๋กœ ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์€

์ด๋ฏธ ๊ทธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.


๋˜ํ•œ, ๊ทธ๋ฆฌ๋””๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ข‹์€ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฏ€๋กœ

๋ฌธ์ œ์—์„œ '๊ฐ€์žฅ ํฐ ์ˆœ์„œ๋Œ€๋กœ', '๊ฐ€์žฅ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ'์™€ ๊ฐ™์€ ๊ธฐ์ค€์„ ์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ์ œ์‹œํ•ด์ค€๋‹ค.

๋Œ€์ฒด๋กœ ์ด ๊ธฐ์ค€์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋Š” ์ž์ฃผ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ง์„ ์ด๋ค„ ์ถœ์ œ๋œ๋‹ค.


 


์‹ค์ œ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋‹ค ๊ณ„์‚ฐํ•ด๋ณด๊ณ  ๊ทธ ์ค‘ ์ตœ์ ์˜ ํ•ด๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์œผ๋ฉด best๊ฐ€ ๋˜๊ฒ ์ง€๋งŒ (์ฒซ๋ฒˆ์งธ ์‚ฌ์ง„ = 21)

์ด ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ์†Œ์š”๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ํƒ์š•๋ฒ•์€ ํ˜„์žฌ ์ˆœ๊ฐ„์— ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.(๋‘๋ฒˆ์งธ ์‚ฌ์ง„ = 19)



์ด์™€ ๊ฐ™์ด ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ๋งŽ๋‹ค.

ํ•˜์ง€๋งŒ, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋Š” ํƒ์š•๋ฒ•์œผ๋กœ ์–ป์€ ํ•ด๊ฐ€ ์ตœ์ ์˜ ํ•ด๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ์—์„œ, ์ด๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ’€๋ฆฌ๋„๋ก ์ถœ์ œ๋œ๋‹ค.





# ์˜ˆ์ œ 3-1. ๊ฑฐ์Šค๋ฆ„๋ˆ

 

๐Ÿ’ก '๊ฐ€์žฅ ํฐ ํ™”ํ๋‹จ์œ„'๋ถ€ํ„ฐ ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค 

why? ํฐ ๋‹จ์œ„๊ฐ€ ํ•ญ์ƒ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐฐ์ˆ˜์ด๋ฏ€๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ๋™์ „๋“ค์„ ์ข…ํ•ฉํ•ด ๋‹ค๋ฅธ ํ•ด๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ

์˜ˆ๋ฅผ ๋“ค์–ด N = 1,260์ผ ๋•Œ๋ฅผ ๊ณ ๋ คํ•ด๋ณด์ž.

  • 500์›์˜ ๊ฐœ์ˆ˜๋Š” 1,260 // 500 = 2(๊ฐœ)
  • 100์›์˜ ๊ฐœ์ˆ˜๋Š” 1,260 % 500 = 260 // 100 = 2(๊ฐœ)
  • 50์›์˜ ๊ฐœ์ˆ˜๋Š” 260 % 100 = 60 // 50 = 1(๊ฐœ)
  • 10์›์˜ ๊ฐœ์ˆ˜๋Š” 60 % 50 = 10 // 10 = 1(๊ฐœ)

 

์ฝ”๋“œ ๋ถ„์„

n = 1260
count = 0

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

for coin in coin_types:
	count += n // coin
	n %= coin


print(count)

 

์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

ํ™”ํ์˜ ์ข…๋ฅ˜๊ฐ€ K๊ฐœ๋ผ๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(K)์ด๋‹ค.

์ด๋Š” ๋™์ „์˜ ์ด ์ข…๋ฅ˜์—๋งŒ ์˜ํ–ฅ์„ ๋ฐ›๊ณ , ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ํ•˜๋Š” ๊ธˆ์•ก๊ณผ ๋ฌด๊ด€ํ•˜๋‹ค.

 

# Tip

๋ฐ”๋กœ ๋ฌธ์ œ ์œ ํ˜•์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด -> ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜์‹ฌํ•˜๊ณ , ํƒ์š•์ ์ธ ํ•ด๊ฒฐ๋ฒ• ์กด์žฌํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•˜๊ธฐ

๋งŒ์•ฝ ๋™์ „์˜ ๋‹จ์œ„๊ฐ€ ์„œ๋กœ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€ ์ˆ˜ ์—†๋‹ค
(๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•จ_8์žฅ)

 


# 2. ํฐ ์ˆ˜์˜ ๋ฒ•์น™

ํฐ์ˆ˜์˜ ๋ฒ•์น™

๋‹ค์–‘ํ•œ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ์ฃผ์–ด์ง„ ์ˆ˜๋“ค์„ M๋ฒˆ ๋”ํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์น™
๋‹จ, ๋ฐฐ์—ด์˜ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋”ํ•ด์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ˆœ์„œ๋Œ€๋กœ 2, 4, 5, 4, 6์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, M = 8์ด๊ณ  K = 3์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž

์ด ๊ฒฝ์šฐ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์˜ ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ ์„ธ๋ฒˆ๊นŒ์ง€๋งŒ ๋”ํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ

(6 + 6 + 6) + 5 + (6 + 6 + 6) + 5 = 46์ด ๋œ๋‹ค.

 

๋‹จ, ์„œ๋กœ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 3, 4, 3, 4, 3์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, M = 7์ด๊ณ  K = 2๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž

์ด ๊ฒฝ์šฐ์—๋Š” ๋‘๋ฒˆ์งธ์˜ 4์™€ ๋„ค๋ฒˆ์งธ์˜ 4๋ฅผ ๋ฒˆ๊ฐˆ์•„ ๋‘๋ฒˆ์”ฉ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

(4 + 4) + (4 + 4) + (4 + 4) + 4 = 28

 

 

n, m, k = map(int, input().split())
arr = list(map(int, input().split()))
result = 0

arr.sort(reverse=True)
first = arr[0]
second = arr[1]

while True:
  for _ in range(k):
    if m == 0:
      break
    result += first
    m -= 1
  if m == 0:
    break
  result += second
  m -= 1

print(result)

 

์œ„์˜ ์˜ˆ์ œ๋Š” M์ด 10,000์ดํ•˜์ด๋ฏ€๋กœ ์ด ๋ฐฉ์‹์œผ๋กœ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
M์˜ ํฌ๊ธฐ๊ฐ€ 100์–ต ์ด์ƒ๋งŒํผ ์ปค์ง„๋‹ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ ํŒ์ •์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค.

์ˆ˜ํ•™์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์ด์šฉํ•ด ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด๋ณด์ž!

 

์˜ˆ๋ฅผ ๋“ค์–ด, N = 5์ด๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. (2, 4, 5, 4, 6)

first = 6์ด๊ณ  second = 5์ด๋ฏ€๋กœ, M = 8์ด๊ณ  K = 3์ผ ๋•Œ

(6 + 6 + 6 + 5) + (6 + 6 + 6 + 5) = 46์ผ ๊ฒƒ์ด๋‹ค.

์ฆ‰, ํŠน์ •ํ•œ (K+1๊ธธ์ด์˜) ์ˆ˜์—ด ํ˜•ํƒœ๋กœ ์ผ์ •ํ•˜๊ฒŒ ๋ฐ˜๋ณตํ•ด์„œ ๋”ํ•ด์ง€๋Š” ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค. 

  • first๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋Š” (M // (K+1)) * N = (8 // 4) * 3 = 6
  • second๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋Š” M // (K+1) = 8 // 4 = 2

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ์— K+1์ด M์— ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด, M = 11์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด

(6 + 6 + 6 + 5) + (6 + 6 + 6 + 5) + (6 + 6 + 6) = 54์ด๋‹ค.

๐Ÿ’ก first๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋Š” $$(M//(K+1))*N+M%(K+1)$$

(11 // 4) * 3 + 11 % 4 = 9

๐Ÿ’ก second๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๋Š” $$M - first ํšŸ์ˆ˜$$

11 - 9 = 2

 

์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์งœ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

n, m, k = map(int, input().split())
arr = list(map(int, input().split()))
result = 0

arr.sort(reverse=True)
first = arr[0]
second = arr[1]

cnt = (m // (k+1)) * k
cnt += m % (k+1)

result += first * cnt
result += second * (m-cnt)

print(result)

 

๐Ÿ’ก
cnt = (m // (k+1)) * k
cnt += m % (k+1)

 

 


# 3. ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„

์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„
: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ ํ•œ ์žฅ์„ ๋ฝ‘๋Š” ๊ฒŒ์ž„
๋‹จ, ๊ฒŒ์ž„์˜ ๋ฃฐ์„ ์ง€ํ‚ค๋ฉฐ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•˜๊ณ  ๋ฃฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

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

 

 

๐Ÿ’ก '๊ฐ ํ–‰๋งˆ๋‹ค ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์€ ํ›„์— ๊ทธ ์ˆ˜์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜'๋ฅผ ์ฐพ๋Š” ๊ฒƒ

๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์ฐพ์•„์ฃผ๋Š” min() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์ž!

 

n, m = map(int, input().split())
result = 0

for _ in range(n):
  data = list(map(int, input().split()))
  min_val = min(data)
  result = max(result, min_val)

print(result)

 


# 4. 1์ด ๋  ๋•Œ๊นŒ์ง€

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

1. N์—์„œ 1์„ ๋บธ๋‹ค.
2. N์„ K๋กœ ๋‚˜๋ˆˆ๋‹ค.

์ด๋•Œ, 1๋ฒˆ ํ˜น์€ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ.

์˜ˆ๋ฅผ ๋“ค์–ด, N = 17์ด๊ณ  K = 4์ผ ๋•Œ

  • step1) 17 - 1 = 16
  • step2) 16 / 4 = 4
  • step3) 4 / 4 = 1

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋˜๊ณ  ์‹คํ–‰ํ•œ ํšŸ์ˆ˜๋Š” 3ํšŒ์ด๋‹ค.

 

๐Ÿ’ก '์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋‚˜๋ˆ„๊ธฐ'

๋”ฐ๋ผ์„œ ์ดˆ๋ฐ˜์— ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์„๋งŒํผ 1์„ ๋นผ๊ณ  ์ดํ›„์— ์—ฐ์†ํ•ด์„œ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ํ•˜๋Š” ํŽธ์ด ์ข‹์Œ

 

n, k = map(int, input().split())
cnt = 0

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

  # k๋กœ ๋‚˜๋ˆ„๊ธฐ
  n = n / k
  cnt += 1

while n > 1:
  n -= 1
  cnt += 1

print(cnt)

 

์œ„์˜ ๋ฌธ์ œ์—์„œ๋Š”, N์˜ ๋ฒ”์œ„๊ฐ€ 10๋งŒ ์ดํ•˜์ด๋ฏ€๋กœ, ์ผ์ผ์ด 1์”ฉ ๋นผ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, N์ด 100์–ต ์ด์ƒ์˜ ํฐ ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ–ˆ์„ ๋•Œ๋„ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ ค๋ฉด,

N์ด K์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋„๋ก ํšจ์œจ์ ์œผ๋กœ ํ•œ๋ฒˆ์— ๋นผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

n, k = map(int, input().split())
cnt = 0

while True:
  # target ๋ณ€์ˆ˜: ๋‚˜๋ˆ„์–ด ์ง€๋Š” ์ˆ˜
  target = (n // k) * k
  cnt += (n - target)
  n = target

  # N์ด K๋ณด๋‹ค ์ž‘์„ ๋•Œ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ
  if n < k:
    break

  cnt += 1
  n //= k

# ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ์ˆ˜์— ๋Œ€ํ•ด์„œ 1์”ฉ ๋นผ๊ธฐ
cnt += (n-1)
print(cnt)
๐Ÿ’ก  target = (n // k) * k

 

๋‘ ์ฝ”๋“œ ๋น„๊ต๋ฅผ ๋ณด๋ฉด, ํ™•์‹คํžˆ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.

 

 


 

'ํฐ์ˆ˜์˜ ๋ฒ•์น™'๊ณผ '1์ด ๋ ๋•Œ๊นŒ์ง€' ๋ฌธ์ œ ์œ ํ˜•์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด

N์ด ํด ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ํƒ€์ž„ ๋ฆฌ๋ฐ‹์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด

๋ฐ˜๋ณต๋ฌธ์„ ํ†ต๊ณผํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ž˜ ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.