[Algorithm] Greedy

Updated:

๐Ÿ“ฃ
๋ณธ ํฌ์ŠคํŠธ๋Š” โ€˜์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌโ€™์„ ๊ณต๋ถ€ํ•˜๊ณ  ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :)
click > (์ด์ฝ”ํ…Œ 2021) ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ

Greedy

์ด๋ก 

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

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

๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ โ€˜์‚ฌ์ „์— ์™ธ์šฐ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ ์œ ํ˜•โ€™์œผ๋กœ ๋ฌธ์ œ ์ถœ์ œ์˜ ํญ์ด ๋งค์šฐ ๋„“๊ณ  ์ฐฝ์˜๋ ฅ์„ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฒ˜๋Ÿผ ํŠน์ด ์ผ€์ด์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹จ์ˆœ ์•”๊ธฐ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ๋Œ€์ฒ˜ํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

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

n = 1260
count = 0

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

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

print(count)

์‹ค์ „๋ฌธ์ œ

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

๋‹จ์ˆœํ•˜๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•. (M์˜ ํฌ๊ธฐ๊ฐ€ 100์–ต ์ด์ƒ์ด๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ! )

# solution_1
N, M, K = map(int, input().split())
arr = list(map(int, input().split()))

arr.sort()
answer = 0
for i in range(M):
	if i % (K + 1) == K:
		answer += arr[-2]
	else:
		answer += arr[-1]
print(answer)

๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•

# solution_2
N, M, K = map(int, input().split())
arr = list(map(int, input().split()))

arr.sort()
answer = 0
cnt = M // (K + 1)
answer = arr[-1] * (M - cnt) + arr[-2] * cnt
print(answer)

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

๊ฐ ํ–‰๋งˆ๋‹ค ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์€ ๋’ค์— ๊ทธ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅ

N, M = map(int, input().split())

arr = []
for i in range(N):
	arr.append(min(list(map(int, input().split()))))
print(max(arr))

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

์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋‚˜๋ˆ„๊ธฐ + N์ด K์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋„๋ก ํšจ์œจ์ ์œผ๋กœ ํ•œ๋ฒˆ์— ๋นผ๋Š” ๋ฐฉ์‹

N, K = map(int, input().split())

answer = 0
while N > 1:
	if N % K == 0:
		answer += 1
		N /= K
	else:
		answer += int(N % K)
		N -= (N % K)
		if N == 0:
			answer -= 1
print(answer)

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ