[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํƒ์š•๋ฒ•(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๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค์ง€ ๋ชปํ•ด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง;