๐Ÿ•๏ธ ICPC Sinchon/Greedy

[BOJ][C++] ๋ฐฑ์ค€ 21314๋ฒˆ: ๋ฏผ๊ฒธ ์ˆ˜ (Silver I)

์„ ๋‹ฌ 2025. 3. 21. 04:54
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

๋ฏผ๊ฒธ์ด๋Š” ๋กœ๋งˆ ์ˆซ์ž๋ฅผ ๋ณด๊ณ  ๊ต‰์žฅํžˆ ํฅ๋ฏธ๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฏผ๊ฒธ์ด๋Š” ์ƒˆ๋กœ์šด ์ˆ˜ ์ฒด๊ณ„์ธ ๋ฏผ๊ฒธ ์ˆ˜๋ฅผ ์ฐฝ์กฐํ–ˆ๋‹ค.
๋ฏผ๊ฒธ ์ˆซ์ž๋Š” 0 ์ด์ƒ์˜ ์ •์ˆ˜N์— ๋Œ€ํ•ด 10N๋˜๋Š” 5 × 10N๊ผด์˜ ์‹ญ์ง„์ˆ˜๋ฅผ ๋Œ€๋ฌธ์žM๊ณผK๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ํ‘œ๊ธฐํ•œ๋‹ค. 10N๊ผด์˜ ์‹ญ์ง„์ˆ˜๋Š”N+ 1๊ฐœ์˜M์œผ๋กœ, 5 × 10N๊ผด์˜ ์‹ญ์ง„์ˆ˜๋Š”N๊ฐœ์˜M๋’ค์— 1๊ฐœ์˜K๋ฅผ ์ด์–ด๋ถ™์ธ ๋ฌธ์ž์—ด๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ์•„๋ž˜ ํ‘œ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
๋ฏผ๊ฒธ ์ˆ˜๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ๋ฏผ๊ฒธ ์ˆซ์ž๋ฅผ ์ด์–ด๋ถ™์—ฌ ๋งŒ๋“ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฏผ๊ฒธ ์ˆ˜MKKMMK๋Š”MK,K,MMK์˜ ์„ธ ๋ฏผ๊ฒธ ์ˆซ์ž๋ฅผ ์ด์–ด๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋ฏผ๊ฒธ ์ˆ˜๋ฅผ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š”, 1๊ฐœ ์ด์ƒ์˜ ๋ฏผ๊ฒธ ์ˆซ์ž๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ ๋’ค, ๊ฐ๊ฐ์˜ ๋ฏผ๊ฒธ ์ˆซ์ž๋ฅผ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด๋ถ™์ด๋ฉด ๋œ๋‹ค. ๋ฏผ๊ฒธ ์ˆซ์ž๋ฅผ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์‹ญ์ง„์ˆ˜๋ฅผ ๋ฏผ๊ฒธ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ๊พธ๋กœ ํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฏผ๊ฒธ ์ˆ˜MKKMMK๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฏผ๊ฒธ์ด๋Š” ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๋ฏผ๊ฒธ ์ˆ˜๊ฐ€ ๋‹ค์–‘ํ•œ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๋‹ค. ๋ฌธ๋“ ๋ฏผ๊ฒธ์ด๋Š” ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š” ์‹ญ์ง„์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’๊ณผ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ๋ฏผ๊ฒธ์ด๋ฅผ ์œ„ํ•ด ํ•˜๋‚˜์˜ ๋ฏผ๊ฒธ ์ˆ˜๊ฐ€ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋˜์—ˆ์„ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์ฃผ์ž.

์ž…๋ ฅ

๋ฏผ๊ฒธ ์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ฏผ๊ฒธ ์ˆ˜๋Š” ๋Œ€๋ฌธ์žM๊ณผK๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋ฉฐ, ๊ธธ์ด๋Š” 3,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฃผ์–ด์ง„ ๋ฏผ๊ฒธ ์ˆ˜๊ฐ€ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋˜์—ˆ์„ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’๊ณผ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋‘ ์ค„๋กœ ๋‚˜๋ˆ„์–ด ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฑด ์ด ๋ฌธ์ œ๋Š” ์ˆซ์ž๋กœ ๋‹ค๋ฃจ๋ฉด ์•ˆ๋œ๋‹ค. ์ž๋ฆฟ์ˆ˜๊ฐ€ 3000์ด ๋„˜์–ด๊ฐ„๋‹ค

(unsigned long long int ์–ด์ฉŒ๊ตฌ ์ด๋Ÿฐ๊ฑฐ ๋‹ค ์•ˆ๋จ)

๋ฌด์กฐ๊ฑด ๋ฌธ์ž์—ด๋กœ ๋‹ค๋ค„์•ผํ•œ๋‹ค.

(์• ์ดˆ์— ๋‚ด๊ฐ€ ์ˆซ์ž์™€ ์ˆ˜์‹์œผ๋กœ ๋จผ์ € ํ•ด๋ดค๋Š”๋ฐ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋งŒ ๋” ๋ณต์žกํ•ด์ง€๋”๋ผ)

 

์ผ๋‹จ K๊ฐ€ ๋‘๊ฐœ ์ด์ƒ ํฌํ•จ๋˜๋Š” ๋ฏผ๊ฒธ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด K๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Š์–ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  M์€ M๋ผ๋ฆฌ ๋ถ™์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

์ตœ๋Œ“๊ฐ’์„ ๋งŒ๋“œ๋ ค๋ฉด K๊ฐ€ ๋‚˜์˜ค๋Š” ์ˆœ๊ฐ„

์•ž์˜ ์—ฐ์†๋œ M๋’ค์— K๋ฅผ ๋ถ™์ธ ๋ฏผ๊ฒธ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

K => 5, MK => 50, MMK => 500, MMMK => 5000

 

10^(์•ž์— M์˜ ๊ฐฏ์ˆ˜)* 5 ์ธ๋ฐ,

๋ฌธ์ž์—ด๋กœ ์น˜๋ฉด 5 ๋’ค์— ์•žM๊ฐฏ์ˆ˜๋งŒํผ 0์„ ๋ถ™์ธ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค

    string cur, big;
    for(char c : s) {
        if(c == m) {
            cur += "0";
        } else if(c == k) {
            big += "5" + cur;
            cur = "";
        }
    }

์ด๋Ÿฐ ๋Š๋‚Œ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ!

 

์ตœ์†Ÿ๊ฐ’์„ ๋งŒ๋“œ๋ ค๋ฉด K๊ฐ€ ๋‚˜์˜ค๋Š” ์ˆœ๊ฐ„

์•ž์˜ ์—ฐ์†๋œ M๋“ค์„ ๋ฏผ๊ฒธ์ˆ˜๋กœ ๊ตฌํ•ด์„œ ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ๊ทธ ๋’ค์— K(=5)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

K => 5, MK => 15, MMK => 105, MMMK => 1005

 

10*(์•ž M ๊ฐฏ์ˆ˜) + 5 ์ธ๋ฐ,

๋ฌธ์ž์—ด๋กœ ์น˜๋ฉด 1 ๋’ค์— ์•žM๊ฐฏ์ˆ˜-1 ๋งŒํผ 0์„ ๋ถ™์ด๊ณ  ๊ทธ ๋’ค์— 5๋ฅผ ๋ถ™์ธ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

    string cur, small;
    for(char c : s) {
        if(c == m) {
            cur += "0";
        } else if(c == k) {
            cur[0] = '1';
            small +=  cur + "5";
            cur = "";
        }
    }

 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด K๋กœ ๋๋‚˜๋Š” ๋ฏผ๊ฒธ(์ˆ˜๋ผ๊ณ  ์“ฐ๊ณ  ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ฝ๋Š”๋‹ค) ๋ฌธ์ž์—ด๋“ค์€ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

๋†“์น˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„์€ M์œผ๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์ธ๋ฐ,

๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋‹ค ๋ˆ ๋‹ค์Œ์— 

cur์— ๋‚จ์€ M๊ด€๋ จ ๋ฌธ์ž์—ด๋“ค์„ ํ•œ๋ฒˆ ๋” ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค

 

์ด๋•Œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ• ๋•

M => 1, MM => 11, MMM => 111, MMMM => 1111

์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•  ๋•

M => 1, MM => 10, MMM => 100, MMMM => 1000

์ด๋ ‡๊ฒŒ   ๋ฐ”๊ฟ”์„œ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

// ํ’€์ด : https://whkakrkr.tistory.com

#include <bits/stdc++.h>

using namespace std;

const char k = 'K';
const char m = 'M';

vector<string> solution(string s) {
    string big, small;
    
    string cur;
    for(char c : s) {
        if(c == m) {
            cur += "0";
        } else if(c == k) {
            big += "5" + cur;
            cur[0] = '1';
            small +=  cur + "5";
            cur = "";
        }
    }
    if(cur != "") { // ๋ฌธ์ž์—ด์ด M์œผ๋กœ ๋๋‚ฌ๋‹ค๋ฉด
        cur[0] = '1';
        small += cur;
        
        for(char c : cur) {
            big += '1';
        }
    }

    return {big, small};
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	string s;
	cin >> s;
	
	vector<string> ans = solution(s);
	
	cout << ans[0] << "\n" << ans[1];
	
    return 0;
}
๋ฐ˜์‘ํ˜•