Koala - 10기/기초 알고리즘 스터디

[백준 / Python] # 2812번 크게 만들기

계란소년 2023. 5. 13. 15:37

https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

CODE

처음 실패

import sys

input = sys.stdin.readline

n, k = map(int, input().split())

stack = []
number = list(input().rstrip())

for i in range(n):
    while k>0 and stack and stack[-1] < number[i]:
        stack.pop()
        k-=1
    stack.append(number[i])

print(*stack,sep='')

두번째 성공

import sys
input = sys.stdin.readline

n, k = map(int, input().split())

stack = []
number = list(input().rstrip())

for i in range(n):
    while k>0 and stack and stack[-1] < number[i]:
        stack.pop()
        k-=1
    stack.append(number[i])

print(''.join(stack[:len(stack)-k]))

실패 이유

  1. print(*stack, sep=''): *stack을 사용하여 리스트 stack의 요소를 개별적으로 전달하고, sep=''을 지정하여 요소들 사이에 구분 문자열 없이 출력합니다. 즉, 각 요소가 공백 없이 연이어서 출력됩니다.
  2. 예를 들어, stack이 [1, 2, 3]인 경우, 출력은 123과 같이 요소들이 연이어 출력됩니다.
  3. print(''.join(stack)): ''.join(stack)을 사용하여 리스트 stack의 요소들을 하나의 문자열로 결합하여 출력합니다. 리스트의 요소들을 ''.join() 메서드에 전달하면, 요소들이 하나의 문자열로 연결됩니다. 이때 요소들 사이에는 구분 문자열이 없습니다.
  4. 예를 들어, stack이 [1, 2, 3]인 경우, 출력은 123과 같이 하나의 문자열로 출력됩니다.
  5. 정리하자면 리스트의 요소가 연이어 출력되거나 하나의 문자열로 출력되느냐의 차이다.