๋ฌธ์
๋ฏผ๊ฒธ์ด๋ ๋ก๋ง ์ซ์๋ฅผ ๋ณด๊ณ ๊ต์ฅํ ํฅ๋ฏธ๋กญ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ๋ฏผ๊ฒธ์ด๋ ์๋ก์ด ์ ์ฒด๊ณ์ธ ๋ฏผ๊ฒธ ์๋ฅผ ์ฐฝ์กฐํ๋ค.
๋ฏผ๊ฒธ ์ซ์๋ 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;
}
'๐๏ธ ICPC Sinchon > Greedy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 19598๋ฒ: ์ต์ ํ์์ค ๊ฐ์ (Gold V) (0) | 2025.03.20 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 13164๋ฒ: ํ๋ณต ์ ์น์ (Gold V) (0) | 2025.03.19 |
[BOJ] ๋ฐฑ์ค 11047๋ฒ: ๋์ 0 (0) | 2025.03.18 |
[BOJ][C++] ๋ฐฑ์ค 20365๋ฒ: ๋ธ๋ก๊ทธ2 (Silver III) (0) | 2025.03.18 |
[BOJ][C++] ๋ฐฑ์ค 1931๋ฒ: ํ์์ค ๋ฐฐ์ (0) | 2025.03.18 |