알고리즘

[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;
}

'알고리즘' 카테고리의 다른 글

[BOJ 1448] 삼각형 만들기  (0) 2024.03.28
[BOJ 3673] 나눌 수 있는 부분 수열  (0) 2024.03.28
[BOJ 4900] 7 더하기  (0) 2024.03.26
[BOJ 17215] 볼링 점수 계산  (0) 2024.03.26
[BOJ 2806] DNA 발견  (0) 2024.03.25