코수가 되는 길

BOJ / python3 백준 2812번 : 크게 만들기 본문

BOJ/stack

BOJ / python3 백준 2812번 : 크게 만들기

지드래용 2022. 7. 22. 17:05

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

 

2812번: 크게 만들기

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

www.acmicpc.net

문제

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

 

SOLUTION

1. 숫자 n이랑 k가 주어진다.

숫자 n에서 k개의 숫자를 지워서 가장 큰 숫자를 만들어야함. 

k가 지울 수 있는 횟수 이므로 숫자 하나를 제거할때마다 k - 1 을 해줘야함.

 

2. 입력받은 숫자 number을 숫자 하나씩 for문으로 검사하면서 

숫자를 입력받아서 answer배열에 추가하고, 

answer 배열에 값이 있고, cnt = k (지울 수 있는 횟수) 가 0보다 크고, answer 배열의 마지막 값이 num보다 작을 때 

answer 의 마지막 값을 삭제 해주고, 삭제를 진행 했으니 cnt -= 1

 

3. answer배열을 join을 이용하여 출력.

 

4. 입력 예시를 통해 자세하게 살펴보면 

n = 4, k = 2 

number = 1924

 

for문 과정

 1. num = 1  while문 조건 만족x(answer 배열에 아무것도 없음) , answer = [1] , cnt = 2

2. num = 9 while문 조건 만족, answer = [9]  , cnt = 1

3. num = 2 while문 조건 만족x (answer[-1] = 9 > 2) , answer = [9, 2] , cnt = 1

4. num = 4 while문 조건 만족, answer = [9, 4] , cnt = 0

 

for문 종료. cnt = 0, answer = [9, 4]

 

소스코드

import sys

n, k = map(int, sys.stdin.readline().split())
number = list(sys.stdin.readline())

answer = []
cnt = k

for num in number:
    while answer and cnt>0 and answer[-1] < num:
        del answer[-1]
        cnt -= 1
    answer.append(num)

print(''.join(answer[:n-k]))

'BOJ > stack' 카테고리의 다른 글

BOJ / python3 백준 10799번 : 쇠막대기  (0) 2022.07.28
BOJ / python3 백준 1874번 : 스택 수열  (0) 2022.07.22