๋ฌธ์
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ ์ดํผ์น๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ์์ด์์ ๊ฐ์ ๊ฐ์ด ์ฐ์ํด์ ๋ํ๋๋ ๊ฒ์ ๊ทธ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ณต๋๋ ๊ฐ์ผ๋ก ํํํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ์ค์ฌ์ ํํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก aabbaccc์ ๊ฒฝ์ฐ 2a2ba3c(๋ฌธ์๊ฐ ๋ฐ๋ณต๋์ง ์์ ํ๋ฒ๋ง ๋ํ๋ ๊ฒฝ์ฐ 1์ ์๋ตํจ)์ ๊ฐ์ด ํํํ ์ ์๋๋ฐ, ์ด๋ฌํ ๋ฐฉ์์ ๋ฐ๋ณต๋๋ ๋ฌธ์๊ฐ ์ ์ ๊ฒฝ์ฐ ์์ถ๋ฅ ์ด ๋ฎ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, abcabcdede์ ๊ฐ์ ๋ฌธ์์ด์ ์ ํ ์์ถ๋์ง ์์ต๋๋ค. ์ดํผ์น๋ ์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฌธ์์ด์ 1๊ฐ ์ด์์ ๋จ์๋ก ์๋ผ์ ์์ถํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ํํํ ์ ์๋์ง ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ababcdcdababcdcd์ ๊ฒฝ์ฐ ๋ฌธ์๋ฅผ 1๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด ์ ํ ์์ถ๋์ง ์์ง๋ง, 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด 2ab2cd2ab2cd๋ก ํํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก 8๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด 2ababcdcd๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ด๋๊ฐ ๊ฐ์ฅ ์งง๊ฒ ์์ถํ์ฌ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค๋ฅธ ์๋ก, abcabcdede์ ๊ฐ์ ๊ฒฝ์ฐ, ๋ฌธ์๋ฅผ 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ฉด abcabc2de๊ฐ ๋์ง๋ง, 3๊ฐ ๋จ์๋ก ์๋ฅธ๋ค๋ฉด 2abcdede๊ฐ ๋์ด 3๊ฐ ๋จ์๊ฐ ๊ฐ์ฅ ์งง์ ์์ถ ๋ฐฉ๋ฒ์ด ๋ฉ๋๋ค. ์ด๋ 3๊ฐ ๋จ์๋ก ์๋ฅด๊ณ ๋ง์ง๋ง์ ๋จ๋ ๋ฌธ์์ด์ ๊ทธ๋๋ก ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ถํ ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ค๋ช ํ ๋ฐฉ๋ฒ์ผ๋ก 1๊ฐ ์ด์ ๋จ์๋ก ๋ฌธ์์ด์ ์๋ผ ์์ถํ์ฌ ํํํ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- s์ ๊ธธ์ด๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- s๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ํด๊ฒฐ
key point, n๊ฐ ๋จ์๋ก ์๋ฅด๋ substring์ ์ด์ฉํ๋ค.
- ๋ฌธ์์ด์ ์์ถํ n๊ฐ ๋จ์๋ 1๋ถํฐ '๋ฌธ์์ด ๊ธธ์ด / 2'๊น์ง ๊ฐ๋ฅํ๋ค. → len
- ๋ฌธ์์ด์ ์์ถํ ํ ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ ์ ์ฅํ ๋ณ์๋ฅผ ans๋ผ๊ณ ํ๊ณ ans๋ ์
๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ก ์ด๊ธฐํ ์ํจ๋ค.
์๋ํ๋ฉด ์ต๋๋ 1000์ด์ง๋ง, 1000์ผ๋ก ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํด๋๋ฉด 'a'๋ผ๋ ์ ๋ ฅ์ผ๋ก ๋ค์ด์์ ๋ 1์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด์๋๋ผ 1000์ด ์ถ๋ ฅ๋๋ค.
๋ฐ๋ผ์, ์ ๋ ฅ์ ๋ฐ๋ผ ์ถฉ๋ถํ ๋ต์ด ๋ ์ ์๋ '๋ฌธ์์ด์ ๊ธธ์ด๋ก' ์ด๊ธฐํํด๋๋ค. → input.size() - string.substr(์์์์น, ๋ฌธ์์ด ๊ธธ์ด) ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ํ๋ ์์์์น๋ถํฐ ์ํ๋ ๊ธธ์ด๋งํผ์ ๋ถ๋ถ๋ฌธ์์ด์ ์ถ์ถํ์ฌ ๋น๊ตํ๊ธฐ ์์ํ๋ค. → sub
- ์๋ ์ฝ๋์์๋ ๋จ์๋ฅผ i๊ฐ ๋งํผ ๋ณด๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ๊ธธ์ด์ i๊ฐ ์ค๊ฒ ๋๋ค.
- ์ฐ์์ผ๋ก sub์ ๊ฐ์ ๋ฌธ์์ด์ ๋ง๋๊ฒ ๋๋ค๋ฉด cnt๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- sub์ ๋ค๋ฅธ ๋ฌธ์์ด์ ๋ง๋๊ฒ ๋๋ค๋ฉด cnt์ sub๋ฅผ s๋ค์ ๋ถ์ธ๋ค.
๋ฌธ์์ด s๋, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ i๊ฐ ๋จ์๋ก ์๋์ ๋ ๋ง๋ค์ด์ง๋ ๋ฌธ์์ด์ด๋ค.
์ด ๋ cnt๋ฅผ s += cnt ๋กํ๋ฉด cnt๊ฐ 1, 10, 100, 1000 ์ด๋ ๋ชจ๋ 1๊ฐ๋ก ์ธ์ํ์ฌ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. → num = to_string(cnt) - ๊ทธ๋ฆฌ๊ณ ์ต๋์ธ s๋ฅผ ans์ ์ ์ฅ์์ผ๋๊ณ
- ์์ ๋ฐฉ์์ 1๋ถํฐ len๊น์ง ๋ฐ๋ณตํ๋ค๋ฉด, ๋ฐ๋ณต๋ฌธ์ ๋์ ans๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int solution(string input) {
int len = input.length() / 2;
int ans = input.size();
for (int i = 1; i <= len; i++) {
string s = "", num = "";
int j = i, cnt = 1;
string sub = input.substr(0, i);
while (j < input.length()) {
if (input.substr(j, i) == sub) {
cnt++;
}
else {
if (cnt > 1) {
num = to_string(cnt);
s += num;
}
s += sub;
sub = input.substr(j, i);
cnt = 1;
}
j += i;
}
if (cnt > 1) {
num = to_string(cnt);
s += num;
}
s += sub;
int size = s.length();
ans = min(ans, size);
}
return ans;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers] ์คํ/ํ, ํ (0) | 2020.06.02 |
---|---|
[programmers] Summer/Winter Coding(2019) ๋ฉ์ฉกํ ์ฌ๊ฐํ (0) | 2020.06.02 |
[programmers] ์์ ํ์, ์นดํซ (0) | 2020.03.11 |
[programmers] ์์ ํ์, ๋ชจ์๊ณ ์ฌ (0) | 2020.03.11 |
[programmers] ์์ ํ์, ์ซ์ ์ผ๊ตฌ (0) | 2020.03.11 |
๋๊ธ