728x90
๋ฌธ์์ด์ ๊ฐ์ง๊ณ ์ฅ๋์ ์น๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐ์ด ๋ค์๋ค. substr์ ์์ ์์ฌ๋ก ์ฌ์ฉํ ์ ์๋์ง, erase๋ฅผ ์ฌ์ฉํ ๋์ index ๋ฌธ์ ์ ์ ์ ํ์ ํ๊ณ ์๋์ง๋ฅผ ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ๊ฐ์๋ค. ์ฌ์ค ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ๊ฐ์์ ๋ฌธ์์ด์ ํฌ๊ธฐ์ด๋ฏ๋ก ์ด๋ฅผ ๊ฐ๊ฐ ๊ตฌํด์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํด๋ ๋๋ค. ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ์๊ตฌํ์ง๋ ์์ง๋ง ์กฐ๊ฑด์ ์ ์ธ์์ ์ ๋ต์ ๊ตฌํ ์ ์๋ ๋ ผ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ํ์ ํ๋ ๋ฌธ์ ์๋ค.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = 0;
int total = 0;
int count = 1;
int min = 99999;
string restore = s;
string temp = "";
// ๋ฌธ์์ด์ ์ ๋ฐ์ ํด๋นํ๋ ๊ธธ์ด๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ ์๋ค.
for(int i = 1 ; i <= s.size()/2 ; i++) {
s = restore;
// ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ Bubble sort ์ฒ๋ผ ํ๋์ฉ ๋น๊ตํ๊ธฐ ์ํ for ๋ฌธ
for(int j = 0; j < s.size() - 1 ; j = j + i) {
// ์์์ ๊ณผ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋ฌธ์ฅ์ ๊ธธ์ด๋ณด๋ค ํฐ ๊ฒฝ์ฐ break;
if(j+i >= s.size()) break;
// j index๋ถํฐ i ๊ธธ์ด ๋งํผ temp์ ํ ๋น
temp = s.substr(j, i);
// ๋ง์ฝ temp์ ๊ทธ ๋ค์ ๋ฐ๋ณต ๋ฌธ์์ด์ด ๊ฐ์ ๊ฒฝ์ฐ
if(temp == s.substr(j+i, i)) {
// ๋ฐ๋ณต๋๋ ๋ฌธ์์ด ์ค ์ ๋ถ๋ถ์ ์ง์ฐ๊ณ
s.erase(j,i);
// erase ํ ๋งํผ ๋ฐ๋ณต๋ฌธ์ index๋ฅผ ๋ก๊ฒจ์ค๋ค.
j = j - i;
// ๋ช ๋ฒ ๋ฐ๋ณต๋์๋์ง ํ์ธ
count++;
// ๋ง์ฝ 3๋ฒ์งธ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์์ ๋ฐ๋ณต๋จ์ด ๋๊ธด๋ค๋ฉด ํ์ฌ ํ์งํ ๋ฐ๋ณต๋จ์ด
// ๋ง์ง๋ง์ด๋ฏ๋ก countํ ๊ฒ์ ๋ฌธ์์ด๋ก ๋ณํ์์ผ ๊ทธ ๊ธธ์ด๊ฐ ์ผ๋ง์ธ์ง
// total์ ๋์ ์ํจ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ count๋ 1๋ก ์ด๊ธฐํ
if(j+2*i <= s.size() && s.substr(j+i,i) != s.substr(j+2*i, i)) {
string one = to_string(count);
total += one.size();
count = 1;
}
}
}
// total ๋ณ์์ ์๋ฅธ ๋ฌธ์์ด์ size์ total์ ๋์ ๋ count ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ํ๋ค
total = s.size() + total;
// ๋ง์ฝ ๊ทธ๊ฒ์ด ์ต์๊ฐ์ด๋ฉด min์ ์ต์ ํ๋ฅผ ์์ผ์ค๋ค.
if(min > total) {
min = total;
}
// ์ด ์์
์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ s.size()/2๋ณด๋ค ์์๋๊น์ง ์ํํ๊ธฐ ์ํ ์ค๋น
count = 1;
total = 0;
}
// ๋ง์ฝ min ์ด ์ต์ ํ ๋์ง ์์๋ค๋ฉด(๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ)
if(min == 99999) answer = s.size();
else answer = min;
return answer;
}