[Baekjoon] 2812번: 크게 만들기(스택 Gold3) - Python

꼬마요리사레미·2023년 8월 7일

Algorithm

목록 보기
2/41

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]]
  1. N과 K를 입력받는다. N은 숫자의 개수이고, K는 제거 연산의 횟수이다.
  2. number 리스트에 숫자 문자열을 입력받는다.
  3. stack 리스트를 초기화하고, number의 첫 번째 숫자를 stack에 추가한다.
for num in number[1:]:
    while stack and K > 0 and stack[-1] < num:
        stack.pop()
        K -= 1
    stack.append(num)
  1. 숫자 문자열의 두 번째 숫자부터 반복문을 통해 순회한다.
  2. while 루프를 통해 다음 숫자가 stack의 마지막 숫자보다 크면, stack의 마지막 숫자를 제거하고 K 값을 감소시킨다. 제거 과정은 K번까지 수행이 가능하다.
  3. stack에 다음 숫자를 추가한다.
stack = stack[:-K] if K > 0 else stack

result = ''.join(stack)
print(result)
  1. K번의 제거 연산을 수행한 후에도 남은 제거 횟수가 있다면, stack의 뒷부분에서 남은 횟수만큼 숫자를 제거한다.
  2. stack에 남은 숫자를 문자열로 결합하여 result 변수에 저장하고 출력한다.

0개의 댓글