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보다 클 수 있다는 점이다. 즉, 빼야할 숫자 개수만큼 빼지 못한 것이다. 이 경우에는 빼지 못 한 개수만큼 뒤에서 차감해주고 출력하면 된다.
'Python > Coding Test' 카테고리의 다른 글
[백준] 17298 : 오큰수 (0) | 2024.04.08 |
---|---|
[백준] 1268 : 임시 반장 정하기 (1) | 2024.04.04 |
[백준] 1439 : 뒤집기 (1) | 2024.03.07 |
[프로그래머스] 키패드 누르기 (1) | 2024.02.26 |
[프로그래머스] 신규 아이디 추천 (0) | 2024.02.26 |