2812번: 크게 만들기
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
📝 풀이
- N자리 숫자가 주어졌을 때, 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램
- 전체 자릿수에 대해서 아래 과정을 반복한다
- 스택에 i번째 자릿수 값을 저장
- 숫자 제거 횟수가 남아 있고(del_cnt > 0) 스택에 저장되어 있는 원소가 있는 경우
- 스택의 끝 수와 i번째 수를 비교하여 i번째 수보다 작은 스택의 끝 수를 제거하고 숫자 제거 횟수를 갱신시킴
- 결과를 출력할 때에는 스택에 담겨있는 수를 전체 자릿수에서 제거할 횟수를 뺀 만큼 순서대로 출력
💻 소스코드
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
nums = list(map(int, input().strip()))
# 숫자 제거 횟수, 결과 리스트
del_cnt, stack = k, []
# n자리까지 반복
for i in range(n):
while del_cnt > 0 and stack:
# i번째 수보다 작은 리스트의 끝 수를 모두 제거
if stack[len(stack) - 1] < nums[i]:
stack.pop()
del_cnt -= 1
else:
break
stack.append(nums[i])
# 결과 리스트에 담겨있는 수를 전체 자릿수에서 제거할 횟수를 뺀 만큼 출력
for i in range(n - k):
print(stack[i], end = '')
'🥇 Problem Solving > Greedy' 카테고리의 다른 글
[Python] BOJ / 1946번 / 신입 사원 (0) | 2023.04.25 |
---|---|
[Python] BOJ / 13305번 / 주유소 (0) | 2023.04.24 |
[Python] BOJ / 3109번 / 빵집 (0) | 2022.06.04 |
[Python] BOJ / 1700번 / 멀티탭 스케줄링 (0) | 2022.05.25 |
[Python] BOJ / 11000번 / 강의실 배정 (0) | 2022.05.25 |