알고리즘
[BOJ 20310] 타노스
dldyou
2024. 3. 26. 20:59
문자열 $S$에서 0과 1을 각각 절반씩 제거하여 새로운 문자열 $S'$을 만들었을 때, 그중 사전순으로 가장 빠른 것을 구해야 한다.
사전순으로 앞에 나오기 위해서는 0이 1보다 앞에 나오는 것이 이득이다. 즉, 앞에서부터 읽어보며 0이면 출력하고 1이면 제거하는 것을 각 숫자 개수의 절반씩 진행하면 된다. 0은 그 이후로는 제거하고, 1은 출력하면 사전순으로 가장 빠른 것을 구할 수 있다.
string s, ans;
int cnt[2];
int main(void) {
fastio;
cin >> s;
for (char c : s) cnt[c - '0']++;
cnt[0] /= 2, cnt[1] /= 2;
for (char c : s) {
if (c == '0' && cnt[0]) cnt[0]--, ans += c;
else if (c == '1') {
if (cnt[1]) cnt[1]--;
else ans += c;
}
}
cout << ans;
return 0;
}