이 포스팅은 다시 풀 문제들 시리즈 5 편 중 5 번째 글 입니다.

  • Part 1 - 25: 길 찾기 게임
  • Part 2 - 백준(1520번): 내리막 길
  • Part 3 - 백준(1937번): 욕심쟁이 판다
  • Part 4 - 백준(2225번): 합분해
  • Part 5 - This Post
▼ 목록 보기

목차

▼ 내리기

골드5 : 스택 문제이다.

풀이

비슷한 문제를 한 3번 봤다. 근데 그 때는 heap을 사용해서 뒤에서 가장 큰 문자를 계속해서 뽑는 것으로 문제를 해결했다.

그런 방식으로 해당 문제를 다시 풀려했으나, 밑에 알고리즘 분류를 봤는데 stack…이더라.

그래서 같은 문제를 다른 방향으로 풀 수 있다는 것도 좀 배우고, 좀 약한 stack도 보충할 겸 참고해서 풀었다. stack은 아무래도 약간 증가하는 수열같은 것을 만들 때 n의 시간 복잡도를 가지고 만드는데 굉장히 유용한 것 같다.

Code

n, k = map(int, input().split())
target = input()
stack = []
_k = k
for char in target:
    while stack and _k > 0 and stack[-1] < char:
        stack.pop()
        _k -= 1
    stack.append(char)

print("".join(stack)[: n - k])

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

removed = 0
stack = []

for now in number:
    while stack and stack[-1] < now and removed < k:
        stack.pop()
        removed += 1
    stack.append(now)

print("".join(stack[:n - k]))

저번이랑 똑같이 풀었는데 똑같은 부분 (n-k)에서 또틀림..

Reference