๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ "๋งค ์ ํ์์ ๋น์ฅ ์ข์๊ฒ๋ง์ ์ ํํด ๋๊ฐ๋ ๋ฐฉ๋ฒ"์ ๋ปํ๋ค. ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ์ ์ข์ ๊ฒ์ ์ ํํด์ผํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ ์ด๋์ ๋ ์ ์ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ข๋ค, ๋์๋ค์ ๊ธฐ์ค์ ์ธ์์ผํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์์ฌ์ ๋์ค๋ ๋ฌธ์ ๋ค์ด ๋ง๋ค.
๊ฐ๋จํ ์์ (๊ฑฐ์ค๋ฆ ๋)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํํ๋ ๋ฌธ์ ๋ก '๊ฑฐ์ค๋ฆ ๋' ๋ฌธ์ ๊ฐ ์๋ค.
์ํ๊ธฐ์ ๊ฑฐ์ค๋ฆ๋์ ๋ฐฐ์ถํด์ผ ํ๋๋ฐ , ์ํ๊ธฐ์๋ 500, 100, 50, 10์์ง๋ฆฌ๊ฐ ๋ฌด์ํ ์กด์ฌํ๋ค. ์ด๋ ๊ฑฐ์ฌ๋ฌ์ค ์ต์ ๋์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ. (๋จ, ๊ฑฐ์ค๋ฆ ๋์ ํญ์ 10์ ๋ฐฐ์์ด๋ค.)
์ด๋ฌํ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, ๋ฌด์กฐ๊ฑด ํฐ ๋จ์์ ๋์ (500์)์ผ๋ก ์ต๋ํ ๊ฑฐ์ฌ๋ฌ์ฃผ๊ณ , ๊ทธ ๋ค์ ๊ฐ๋ฅํ ํฐ ๋จ์์ ๋์ (100์)์ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
์์ ์์ ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ฑฐ์ค๋ฆ ๋์ด ํญ์ 10์ ๋ฐฐ์์ด๊ธฐ ๋๋ฌธ์, ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด๋ ๋น๋๊ฐ ์ผ์ด ์๋ค. ๊ทธ๋์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋งค์ฐ ํจ๊ณผ์ ์ด์ง๋ง, ๋ค๋ฅธ ๋ฌธ์ ์ ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ํฌ๋๋ ์ด ๋ฐฉ๋ฒ์ด ์ ๋นํ์ง, ์์ธ๋ ์๋์ง ๋ฐ๋์ ํ์ธํด์ผํ๋ค.
๋ค์ ๋งํ๋ฉด, ๋งค ์ ํ์ ์๊ฐ์ ๋ํด์๋ ์ต์ ์ด์ง๋ง, ์ข
ํฉ์ ์ผ๋ก ๊ณ ๋ คํ๋ฉด ์ต์ ์ด๋ผ๋ ๋ณด์ฅ์ ์๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ชฉ๋ก(๋ฐฑ์ค)
14916 ๋ฒ : ๊ฑฐ์ค๋ฆ๋ (๋์ด๋ : ์ค๋ฒ5)
https://www.acmicpc.net/problem/14916
๊ฑฐ์ค๋ฆ๋
n = int(input())
five = n // 5
two = 0
while (n > 0) :
if ((n - (five * 5)) % 2 == 0):
two = (n - (five * 5)) // 2
answer = five + two
break
else :
five -= 1
if five <= 0 :
answer = -1
break
print(answer)
2217๋ฒ : ๋กํ (๋์ด๋ : ์ค๋ฒ4)
https://www.acmicpc.net/problem/2217
๋กํ
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
arr.sort(reverse=True)
solution=[]
for i in range(len(arr)):
solution.append(arr[i] * (i+1))
print(max(solution))