간단하게 그리디로 접근 가능한 문제이다. 잘 생각해보면 같은 위치의 1, 0 중 0이 사전적으로 앞서므로 0은 가급적 앞에, 1은 가급적 뒤에 남아 있는게 좋다. 즉 0은 오른쪽부터 왼쪽으로 탐색하며 절반을 제거하고, 1은 왼쪽부터 오른쪽으로 탐색하며 절반을 제거하면 사전순으로 가장 앞서는 문자열을 남길 수 있다.
풀이 코드
S = list(input().strip())
ones, zeros = 0, 0
for s in S :
if s == '0' :
zeros += 1
else :
ones += 1
ones //= 2
zeros //= 2
idx = len(S) - 1
while zeros :
if S[idx] == '0' :
S.pop(idx)
zeros -= 1
idx -= 1
idx = 0
while ones :
if S[idx] == '1' :
S.pop(idx)
ones -= 1
else :
idx += 1
print(''.join(S))