λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ 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
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€