[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/python] ํƒ์š•๋ฒ•(Greedy) : ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

2021. 7. 27. 22:40

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ˆซ์ž number์™€ ์ œ๊ฑฐํ•  ์ˆ˜์˜ ๊ฐœ์ˆ˜ k๊ฐ€ solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. number์—์„œ k ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

  • number๋Š” 1์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
  • k๋Š” 1 ์ด์ƒ number์˜ ์ž๋ฆฟ์ˆ˜ ๋ฏธ๋งŒ์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ •๋‹ต (1) : max ํ•จ์ˆ˜ ๊ตฌํ˜„

def solution(number, k):
    answer = ''

    # max ํ•จ์ˆ˜
    def _max(s, e):
        num = [s, number[s]]
        for i in range(s, e):
            if number[i] == "9":
                return [i, 9]
            elif number[i] > num[1]:
                num = [i, number[i]]
        return num

    start = 0
    for end in range(k+1, len(number)):
        n = _max(start, end)
        answer += str(n[1])
        start = n[0]+1
    answer += str(max(number[start:]))

    return answer

 

์ •๋‹ต (2) : stack ์‚ฌ์šฉ

def solution(number, k):
    stack = [number[0]]
    for n in number[1:] :
        while stack and k > 0 and stack[-1] < n : 
            stack.pop()
            k -= 1
        stack.append(n)
    return ''.join(stack[:len(number)-k])

์ •๋‹ต (1)์—์„œ maxํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋˜๊ธธ๋ž˜ 

maxํ•จ์ˆ˜๋ฅผ _max ํ•จ์ˆ˜๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

์ •๋‹ต (2)๋Š” stack์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ

stack์— ๋‹ด๊ฒจ์žˆ๋Š” ์ด์ „์˜ ์ˆซ์ž๊ฐ€ ๋” ์ž‘์œผ๋ฉด ๊ทธ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ

stack.pop()ํ•œ ํ›„ ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ์ˆซ์ž ๊ฐœ์ˆ˜ k์—์„œ -1์„ ํ•œ๋‹ค.

์•ž์ชฝ์˜ ์ˆซ์ž๊ฐ€ ์ปค์„œ ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ์ˆซ์ž ๊ฐœ์ˆ˜๋งŒํผ ์ œ๊ฑฐ๋˜์ง€์•Š์•˜์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ

์ธ๋ฑ์Šค ๋ฒ”์œ„ len(number)-k๊นŒ์ง€๋งŒ joinํ•˜์—ฌ return ํ•œ๋‹ค.

BELATED ARTICLES

more