1.문제
크게 만들기
2. 코드
N, K = map(int, input().split())
number = list(input().strip())
stack = [number[0]]
for num in number[1:]:
while stack and K > 0 and stack[-1] < num:
stack.pop()
K -= 1
stack.append(num)
stack = stack[:-K] if K > 0 else stack
result = ''.join(stack)
print(result)
3. 로직
N, K = map(int, input().split())
number = list(input().strip())
stack = [number[0]]
- N과 K를 입력받는다. N은 숫자의 개수이고, K는 제거 연산의 횟수이다.
- number 리스트에 숫자 문자열을 입력받는다.
- stack 리스트를 초기화하고, number의 첫 번째 숫자를 stack에 추가한다.
for num in number[1:]:
while stack and K > 0 and stack[-1] < num:
stack.pop()
K -= 1
stack.append(num)
- 숫자 문자열의 두 번째 숫자부터 반복문을 통해 순회한다.
- while 루프를 통해 다음 숫자가 stack의 마지막 숫자보다 크면, stack의 마지막 숫자를 제거하고 K 값을 감소시킨다. 제거 과정은 K번까지 수행이 가능하다.
- stack에 다음 숫자를 추가한다.
stack = stack[:-K] if K > 0 else stack
result = ''.join(stack)
print(result)
- K번의 제거 연산을 수행한 후에도 남은 제거 횟수가 있다면, stack의 뒷부분에서 남은 횟수만큼 숫자를 제거한다.
- stack에 남은 숫자를 문자열로 결합하여 result 변수에 저장하고 출력한다.