Algorithm/백준

[백준/Python] 크게 만들기

poppy 2021. 12. 6. 11:37
반응형

https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

N, K = map(int, input().split())
nums = list(input())
k, stack = K, []

for i in range(N):
    while k > 0 and stack and stack[-1] < nums[i]: # 앞에 숫자가 해당 숫자보다 작을 경우 지운다
        stack.pop()
        k -= 1
    stack.append(nums[i])
print(''.join(stack[:N-K])) # K개를 지우지 못하는 경우를 위해 인덱스 슬라이싱을 해준다

1. 필요한 정보를 입력받고 필요한 변수를 생성한다. (스택을 사용해야 시간초과가 나지 않는다고 한다.)

2. 전체 숫자를 탐색하여 가장 큰 수를 구한다.

    2-1. 앞의 숫자가 해당 숫자보다 작다면 앞의 숫자(stack[-1])를 지운다.

    2-2. 해당 숫자를 스택에 추가한다.

3. 결과를 출력한다. 이 때 K를 지우지 못하는 경우(ex. 9421)를 위해 인덱스 슬라이싱(:[N-K])을 해준다.

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준/Python] 감시  (0) 2021.12.20
[백준/Python] 민겸 수  (0) 2021.12.13
[백준/Python] 병든 나이트  (0) 2021.12.02
[백준/Python] 공유기 설치  (0) 2021.11.29
[백준/Python] 녹색 옷 입은 애가 젤다지?  (0) 2021.11.24