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

 

19848번: 빈 문자열 만들기

0과 1로만 이루어져 있으며, 0의 개수와 1의 개수가 동일한 문자열 S가 주어진다. 당신은 S에 다음과 같은 작업을 여러 번 수행할 수 있다: S의 길이 2k인 연속한 부분문자열이 앞 k개 문자가 모두

www.acmicpc.net

문자열을 앞에서부터 볼 때 0에서 1로 바뀌거나 1에서 0으로 바뀌는 경우의 개수를 보자. 중간에서 부분 문자열을 삭제하면 그 개수가 2 감소한다. 

0101->01

0100->00

1101->11 

이런 식이기 때문. 즉, 어떻게 삭제 작업을 수행해도 가운데에서만 수행했다면 주어진 문제를 해결하는 최솟값과 같은 횟수만큼 작업을 수행한다. 문자열을 스택에 쌓으면서 맨 처음을 포함하지 않고 지워야 할 때마다 지워주면 문제가 해결된다. 문자가 바뀌거나, 쌓은 1이나 0이 그 앞의 0이나 1보다 많아지는 지점에서 지우면 된다. 

'알고리즘 > 백준' 카테고리의 다른 글

백준 15714 열려라 참깨  (0) 2023.02.26
백준 8225 Tour de Byteotia  (0) 2023.02.16
백준 23911 Beauty of tree  (0) 2023.02.16
백준 4792 레드 블루 스패닝 트리  (0) 2023.02.15
백준 15480 LCA와 쿼리  (0) 2023.02.14

+ Recent posts