Loading [MathJax]/jax/output/CommonHTML/jax.js

알고리즘

[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