๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์ด์ฝ”ํ…Œ

[์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค] ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - 1์ด ๋  ๋•Œ๊นŒ์ง€

 

 

๋ฌธ์ œ

 

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

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

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

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

 

 

๋‚˜์˜ ์ฝ”๋“œ

# ์ •์ˆ˜ n๊ณผ k๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
n = int(input()) 
k = int(input()) 
count = 0

# n์ด 1๋ณด๋‹ค ํด ๋•Œ๊นŒ์ง€ ์•„๋ž˜ ์กฐ๊ฑด๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
while n > 1:
    # n์ด ํ™€์ˆ˜์ด๋ฉด ๋‚˜๋ˆŒ ์ˆ˜ ์—†์œผ๋‹ˆ 1์„ ๋บ€๋‹ค.
    if n % k != 0:
      n -= 1
      count += 1

    # n์ด ์ง์ˆ˜์ด๋ฉด k๋ฅผ ๋‚˜๋ˆˆ๋‹ค. 
    else: 
        n /= k
        count += 1

print(count)

# ์ •๋‹น์„ฑ ๋ถ„์„: ์•„๋ฌด๋ฆฌ ํฐ ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋˜์–ด๋„ 1์„ ๊ณ„์† ๋นผ์„œ 1์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์ด์šฉํ•ด์„œ 1์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋น ๋ฅด๊ธฐ์— ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ •๋‹นํ•˜๋‹ค.

 

ํ•ด์„ค ์ฝ”๋“œ

# N, K๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ›๊ธฐ
n, k = map(int, input().split())

result = 0

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

# ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ์ˆ˜์— ๋Œ€ํ•˜์—ฌ 1์”ฉ ๋นผ๊ธฐ
result += (n - 1)
print(result)