[ํ๋ก๊ทธ๋๋จธ์ค] ํ์๋ฒ(Greedy) - ํฐ ์ ๋ง๋ค๊ธฐ
๋ฌธ์
๋ฌธ์ ์ค๋ช
์ด๋ค ์ซ์์์ k๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๊ตฌํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ซ์ 1924์์ ์ ๋ ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 94 ์ ๋๋ค.
๋ฌธ์์ด ํ์์ผ๋ก ์ซ์ number์ ์ ๊ฑฐํ ์์ ๊ฐ์ k๊ฐ solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. number์์ k ๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ๋ง๋ค ์ ์๋ ์ ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฌธ์์ด ํํ๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- number๋ 1์๋ฆฌ ์ด์, 1,000,000์๋ฆฌ ์ดํ์ธ ์ซ์์ ๋๋ค.
- k๋ 1 ์ด์ number์ ์๋ฆฟ์ ๋ฏธ๋ง์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
numbers | k | return |
---|---|---|
โ1924โ | 2 | โ94โ |
โ1231234โ | 3 | โ3234โ |
โ4177252841โ | 4 | โ775841โ |
ํ์ด
Python
def solution(number, k):
answer = ''
stack = [number[0]]
for num in number[1:]:
# stack ์ ๊ฑฐ ์กฐ๊ฑด๊ณผ k ์กฐ๊ฑด ํ์์ ์คํ์ ๋ด๊ธด ์ด์ ์ ์ ์ค ํ์ฌ ์๋ณด๋ค ์์ ์๋ฅผ ์ ๊ฑฐํด๋๊ฐ
while len(stack) > 0 and num > stack[-1] and k > 0:
stack.pop()
k -= 1
stack.append(num) # number์ ๋ชจ๋ ์ซ์๋ฅผ stack์ ๋ฃ์ด ๋น๊ต ๋์์ด ๋๋๋ก ํจ
# k๊ฐ๋งํผ ์ ๊ฑฐ๋์ง ์์์ ๊ฒฝ์ฐ ๋จ์ ์๋งํผ์ ๋ค์์ ์ ๊ฑฐ
if k > 0 :
stack = stack[:-k]
answer = ''.join(stack)
return answer
๐ก
- ์คํ์ ์ด์ฉํ ๋ฐฉ์
- ๋ค ์ ๊ฑฐ๋์ง ์์์ ๊ฒฝ์ฐ๋ฅผ ์ํ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํจ.
- ์ด๋ฐ ๋ฌธ์ ์ด์ ์๋ ํ์๋๋ฐ ๋ ํ๋ฆฐ๊ฑฐ๋ณด๊ณ ๋ค์์๋ ๋ฌด์กฐ๊ฑด ๋ง์ถ๊ธฐ ์ํด ์ ๋ต ํ์ด๋ฅผ ๊ธฐ๋กํฉ๋๋ค,,
๋ฒ์ธ - ํจ์จ์ฑ์์ ๋น ๊พธ๋จน์ ํ์ด
Python
def solution(number, k):
answer = ''
result = list(number)
while True:
for i in range(1, len(result)):
if result[i-1] < result[i]:
del result[i-1]
k -= 1
break
if k == 0:
break
answer = ''.join(result)
return answer
๐
- ์ต์ด ๋ฌธ์์ด์ ์์์๋ถํฐ ๊ฒ์ฌํ๋ฉฐ ๋ฌธ์ ์์ ์ด ๋ค์ ๋ฌธ์๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ ๊ฑฐํ ๋ค ์ด๋ ๊ฒ ๋ฐ๋ ๋ฌธ์์ด์ ์ต์ด ๋ฌธ์์ด์ ๋์น์ํด. k๊ฐ์ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณต.
- ํ ์ผ 10๋ฒ, 12๋ฒ์์ ์๊ฐ์ด๊ณผ ๋ธ ํด
- ํ ๋ฐํด ๋๋ ํ ๋ฌธ์์ฉ๋ง ์ ๊ฑฐํ๊ณ , ๋ฌธ์์ด์ ๋์น์ํด์ผ๋ก์จ ์ด๋ฏธ ๊ฒ์ฌํ์ฌ ํต๊ณผํ ๋ฌธ์๊น์ง ๋ค์ ํฌ๊ธฐ ๊ฒ์ฌ๋ฅผ ํ๊ฒ๋๋ฏ๋ก ๋ถํ์ํ ๊ฒ์ฌ ๊ณผ์ ์ด ๋ฐ๋ณต๋์ด ์๊ฐ์ ์ก์๋จน๋ ๊ฒ ๊ฐ์.
- ์ ํ์ด์ ์น๋ช ์ ์ธ ํ๊ณ!!
number = "987654321"
,k = 8
๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ while๋ฌธ์ ๋น ์ ธ๋์ค์ง ๋ชปํด ๋ฌดํ๋ฃจํ์ ๋น ์ง;