백준 온라인 저지, 그리디 / 2812번: 크게만들기 (파이썬 / 백준 골드문제)
2021. 11. 12. 01:54ㆍ알고리즘/그리디
728x90
반응형
문제
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000)
둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다.
출력
입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다.
예제 입력 1
4 2 1924
예제 출력 1
94
예제 입력 2
7 3 1231234
예제 출력 2
3234
예제 입력 3
10 4 4177252841
예제 출력 3
775841
접근 방법
- 가장 자리수가 높은 숫자는 가장 숫자가 커야하기 때문에 앞에 숫자부터 하나씩 탐색하며 앞에 숫자가 뒤에 나오는 숫자보다 작을 경우 이를 빼준다.
- 한번 빼줄때마다 해당 위치에서부터 차례대로 다시 탐색을 진행한다.
- 만약 전부 탐색을 진행했음에도 더이상 뺄 숫자가 없다면 제일 뒤에 있는 숫자를 빼야하는 남은 숫자만큼 뺀다.
코드
# https://www.acmicpc.net/problem/2812
# 접근방법
# 가장 자리수가 높은 숫자는 가장 숫자가 커야하기 때문에 앞에 숫자부터 하나씩 탐색하며 앞에 숫자가 뒤에 나오는 숫자보다 작을 경우 이를 빼준다.
# 한번 빼줄때마다 해당 위치에서부터 차례대로 다시 탐색을 진행한다.
# 만약 전부 탐색을 진행했음에도 더이상 뺄 숫자가 없다면 제일 뒤에 있는 숫자를 빼야하는 남은 숫자만큼 뺀다.
n, k = map(int, input().split())
number = [x for x in input()]
array = [int(number[0])]
i = 1
while i < len(number):
while len(array) > 0 and int(number[i]) > array[-1]:
if k == 0:
break
array.pop()
k -= 1
array.append(int(number[i]))
# print('number[i]: ', number[i])
# print('array: ', array)
i += 1
while k > 0:
array.pop()
k -= 1
for x in array:
print(x, end = '')
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 온라인 저지, 그리디 / 1826번: 연료채우기 (파이썬 / 백준 골드문제) (0) | 2021.11.16 |
---|---|
백준 온라인 저지, 그리디 / 15922번: 아우으우아으이야 (파이썬 / 백준 골드문제) (0) | 2021.11.12 |
백준 온라인 저지, 그리디 / 2109번: 순회강연 (파이썬 / 백준 골드문제) (0) | 2021.11.11 |
백준 온라인 저지, 그리디 / 2212번: 센서 (파이썬 / 백준 골드문제) (0) | 2021.11.11 |
백준 온라인 저지, 그리디 / 1026번: 보물 (파이썬) (0) | 2021.11.11 |