suvera-dev ๐Ÿฅฆ

Algorithm ) Greedy (2) ๋ณธ๋ฌธ

Algorithm/CodingTest - Python

Algorithm ) Greedy (2)

suvera 2022. 2. 6. 08:43

์‹ค์ „ ๋ฌธ์ œ ํ’€์ด 

2๏ธโƒฃ ๋ฌธ์ œ 2 : ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„

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

- ๊ฒŒ์ž„ ๋ฃฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

- 1. ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ๋“ค์ด N x M ํ˜•ํƒœ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋•Œ N์€ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, M์€ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

- 2. ๋จผ์ € ๋ฝ‘๊ณ ์ž ํ•˜๋Š” ์นด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ–‰์„ ์„ ํƒํ•œ๋‹ค 

- 3. ๊ทธ ๋‹ค์Œ ์„ ํƒ๋œ ํ–‰์— ํฌํ•จ๋œ ์นด๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•œ๋‹ค 

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

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

 

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(result, min_value)

print(result)

# 2์ค‘ ๋ฐ˜๋ณต๋ฌธ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋‹ต์•ˆ ์˜ˆ์‹œ

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

result = 0
for i in range(n):
    data = list(map(int, input().split()))
    # ํ˜„์žฌ ์ค„์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜ ์ฐพ๊ธฐ
    min_value = 10001
    for a in data:
        min_value = min(min_value, a)
    result = max(result, min_value)

print(result)

 

 

3๏ธโƒฃ ๋ฌธ์ œ 3 : 1์ด ๋ ๋•Œ๊นŒ์ง€ 

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

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

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

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

 

์˜ˆ๋ฅผ๋“ค์–ด, N์ด 17์ด๊ณ  K๊ฐ€ 4๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋•Œ 1๋ฒˆ์˜ ๊ณผ์ •์„ 1๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋ฉด N์€ 16์ด ๋œ๋‹ค. 

์ดํ›„์— 2๋ฒˆ์˜ ๊ณผ์ •์„ 2๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋ฉด N์€ 1์ด ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด ๊ฒฝ์šฐ ์ „์ฒด ๊ณผ์ •์„ ์‹คํ–‰ํ•œ ํšŸ์ˆ˜๋Š” 3์ด ๋œ๋‹ค. 

์ด๋Š” N์„ 1๋กœ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ํšŸ์ˆ˜์ด๋‹ค.

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

 

๐Ÿฅฆ ๋ฌธ์ œ ํ•ด๊ฒฐ ์•„์ด๋””์–ด : ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋‚˜๋ˆ„๊ธฐ 

- ์–ด๋– ํ•œ ์ˆ˜๊ฐ€ ์žˆ์„ ๋•Œ , 2์ด์ƒ์˜ ์ˆ˜๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด 1์„ ๋นผ๋Š” ๊ฒƒ๋ณด๋‹ค ์ˆซ์ž๋ฅผ ํ›จ์”ฌ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์Œ 

 

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

# N์ด K์ด์ƒ์ด๋ผ๋ฉด K ๋กœ ๊ณ„์† ๋‚˜๋ˆ„๊ธฐ
while n >= k:
    # N์ด K๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๋‹ค๋ฉด N์—์„œ 1์”ฉ ๋นผ๊ธฐ
    while n % k != 0:
        n -= 1
        result += 1
    # K๋กœ ๋‚˜๋ˆ„๊ธฐ
    n //= k
    result += 1

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

print(result)

# ๋” ํšจ์œจ์ ์ธ ํ’€์ด๋ฒ•
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)

- 2๋ฒˆ์งธ ํ’€์ด๋ฒ• while๋ฌธ ์„ค๋ช… ์ถ”๊ฐ€ ! 

- target ๊ฐ’์— (n // k) * k ๋ผ๋Š” ๊ฐ’์„ ๋„ฃ์œผ๋ฉด n์ด k๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋”๋ผ๋„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด k๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๊ฐ€ ์ €์žฅ๋จ 

- n์—์„œ 1์„ ๋นผ๋Š” ๊ณผ์ •์„ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ธ์ง€ ๊ณ„์‚ฐํ•ด์„œ result์— ์ €์žฅ

- ์ด์ œ n์€ target์ด ๋˜๋Š” ๊ฒƒ -> n ์ด k๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ

- ์ดํ›„์— k๋กœ ๋‚˜๋ˆ„๊ธฐ ! 

Comments