๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿƒ algorithm/programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 2 - ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

by HandHand 2021. 3. 1.

๋ฌธ์ œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

ํ’€์ด ๊ณผ์ •

k ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ธŒ๋ฃจํŠธ ํฌ์Šค ๋กœ ์ ‘๊ทผํ•ด ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๋ฉด ์ตœ๋Œ€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋‚ด์— ์ˆ˜ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹ ์— ํฐ ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์œผ๋กœ ๊ฐ ์ˆซ์ž๋ฅผ ํƒ์š•์ ์ธ ์„ ํƒ ์— ๋”ฐ๋ผ ์ œ๊ฑฐํ•ด์ค€๋‹ค๋ฉด ์„ ํ˜• ์‹œ๊ฐ„๋‚ด์— ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํƒ์š•์ ์ธ ์„ ํƒ ์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๊ฐ€ ์ ˆ๋Œ€ ์†ํ•ด๋ณด๋Š” ์ผ์ด ์—†์Œ์„ ์ฆ๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์•ผํ•จ์€ ์ž๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํฐ ์ž๋ฆฌ์ˆ˜ ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ (์ธ๋ฑ์Šค๋กœ ๋”ฐ์ง€๋ฉด 0 ๋ถ€ํ„ฐ) ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ฐ ์ˆซ์ž๋“ค์˜ ์ •๋‹น์„ฑ์„ ๋”ฐ์ ธ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ œ๊ฑฐ๋˜๋Š” ์ˆซ์ž ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜๊ฐ€ ํ•ด๋‹น ์ž๋ฆฌ์ˆ˜๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ˆซ์ž๊ฐ€ ์ œ๊ฑฐ๋œ ํ›„ ์ „์ฒด ์ž๋ฆฌ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ค„์–ด๋“  ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ œ๊ฑฐ๋˜๋Š” ์ˆซ์ž ๋‹ค์Œ์— ์˜ค๋Š” ์ˆ˜๊ฐ€ ํ•ด๋‹น ์ˆ˜๋ณด๋‹ค ์ปค์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์Šคํƒ ์„ ํ†ตํ•ด ๊ฐ ์ž๋ฆฌ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ ํ˜„์žฌ top ์— ์กด์žฌํ•˜๋Š” ์ˆ˜๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ pop ์—ฐ์‚ฐ์„ ํ†ตํ•ด top ์—๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ์œ ์ง€๋˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋•Œ pop ๋˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋ชฉํ‘œ ์ œ๊ฑฐ ํšŸ์ˆ˜์— ๋ฏธ์น˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ํ˜„์žฌ ์ˆซ์ž๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋’ท ์ž๋ฆฌ๋ถ€ํ„ฐ ๋ถ€์กฑํ•œ ๊ฐœ์ˆ˜ ๋งŒํผ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ


def solution(number, k):
    stack = []
    pop_count = 0

    for num in number:
        if not stack or stack[-1] >= num:
            stack.append(num)
        elif stack[-1] < num:
            while pop_count < k and stack and stack[-1] < num:
                stack.pop()
                pop_count += 1
            stack.append(num)

    if pop_count < k:
        for _ in range(k-pop_count):
            stack.pop()

    return ''.join(stack)


number = '1924'
k = 2

print(solution(number, k))  # 94
๋ฐ˜์‘ํ˜•