[백준 / 2812] 크게 만들기
in Problem Solving on BaekJoon
날짜: 2021년 10월 14일
소요 시간: 1시간 7분 23초
카테고리: 스택
태그: Gold.5, 2812, 파이썬
입출력 예시
| 예제 입력 | 예제 출력 |
|---|---|
| 4 2 | 94 |
| 1924 | |
| 7 3 | 3234 |
| 1231234 | |
| 10 4 | 775841 |
| 4177252841 |
내가 적은 코드
import sys
N , K = map(int, sys.stdin.readline().split())
num = list(sys.stdin.readline().strip())
count = K
number = []
for i in range(N):
while count > 0 and number and number[-1] < num[i]:
number.pop()
count -= 1
number.append(num[i])
answer = "".join(number[:N-K])
print(answer)
풀이 과정
number이라는 스택 리스트를 만들어서
num의 i번째 수를 number에 계속 추가하는 작업을 반복
number에 원소가 있다면
num의 i번째 수와 비교하여 더 작다면 pop()하고
count를 1씩 뺌
count가 0이 될 때까지 반복 한 후
number을 N-K의 길이만큼 출력
베스트 코드
def remove_k_digits(num, k):
num_stack = []
for digit in num:
while k and num_stack and num_stack[-1] < digit:
num_stack.pop()
k -= 1
num_stack.append(digit)
final_stack = num_stack[:-k] if k else num_stack
return "".join(final_stack) or "0"
N, K = map(int, input().split())
number = input()
print(remove_k_digits(number, K))
반성
- 베스트 코드는 내 코드와 같은 로직에서 함수를 통해 풀었다.
