Python/Coding Test
[백준] 2812 : 크게 만들기
semperparatus
2024. 4. 8. 19:37
https://www.acmicpc.net/problem/2812
2812번: 크게 만들기
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
코드
N, K = map(int, input().split())
num = list(map(int, list(input())))
stack = []
for i in num:
while stack and stack[-1] < i and K > 0:
stack.pop()
K -= 1
stack.append(i)
if K == 0:
print(''.join(map(str, stack)))
else:
print(''.join(map(str, stack[:-K])))
풀이
해당 문제는 스택을 활용해야 한다. 스택 문제를 여러 번 풀다보니 구조가 익숙해진 거 같다. 리스트 길이만큼 돌면서 스택에 추가해주고, 다음 원소와 스택의 끝 원소를 비교하는 구조가 기본이다.
이 문제에서도 현재 값과 스택의 마지막 값을 비교해서 현재값이 더 크면 스택의 마지막 값을 빼주고, 빼야하는 숫자의 개수 K에서 -1을 해준다. 그리고, K가 0이 되었을 때 더이상 숫자를 뺄 수 없으므로 나머지 숫자는 다 스택에 추가해준다.
주의해야 할 점은 출력이다. 처음 출력할 때, 스택의 원소를 문자열로 바꿔 출력을 했고 테스트케이스도 전부 통과했다. 하지만 간과한 점은 K가 아직 0보다 클 수 있다는 점이다. 즉, 빼야할 숫자 개수만큼 빼지 못한 것이다. 이 경우에는 빼지 못 한 개수만큼 뒤에서 차감해주고 출력하면 된다.