https://programmers.co.kr/learn/courses/30/lessons/60057
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ฌธ์์ด ์์ถ
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ "์ดํผ์น"๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ "์ดํผ์น"๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ์์ด์์ ๊ฐ์ ๊ฐ์ด ์ฐ์ํด์ ๋ํ๋๋ ๊ฒ์ ๊ทธ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ณต๋๋ ๊ฐ์ผ๋ก ํํํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ์ค์ฌ์ ํํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก "aabbaccc"์ ๊ฒฝ์ฐ "2 a 2 ba3 c"(๋ฌธ์๊ฐ ๋ฐ๋ณต๋์ง ์์ ํ๋ฒ๋ง ๋ํ๋ ๊ฒฝ์ฐ 1์ ์๋ตํจ)์ ๊ฐ์ด ํํํ ์ ์๋๋ฐ, ์ด๋ฌํ ๋ฐฉ์์ ๋ฐ๋ณต๋๋ ๋ฌธ์๊ฐ ์ ์ ๊ฒฝ์ฐ ์์ถ๋ฅ ์ด ๋ฎ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, "abcabcdede"์ ๊ฐ์ ๋ฌธ์์ด์ ์ ํ ์์ถ๋์ง ์์ต๋๋ค. "์ดํผ์น"๋ ์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฌธ์์ด์ 1๊ฐ ์ด์์ ๋จ์๋ก ์๋ผ์ ์์ถํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ํํํ ์ ์๋์ง ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, "ababcdcdababcdcd"์ ๊ฒฝ์ฐ ๋ฌธ์๋ฅผ 1๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด ์ ํ ์์ถ๋์ง ์์ง๋ง, 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด "2 ab2 cd2 ab2 cd"๋ก ํํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก 8๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด "2 ababcdcd"๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ด๋๊ฐ ๊ฐ์ฅ ์งง๊ฒ ์์ถํ์ฌ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค๋ฅธ ์๋ก, "abcabcdede"์ ๊ฐ์ ๊ฒฝ์ฐ, ๋ฌธ์๋ฅผ 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ฉด "abcabc2de"๊ฐ ๋์ง๋ง, 3๊ฐ ๋จ์๋ก ์๋ฅธ๋ค๋ฉด "2 abcdede"๊ฐ ๋์ด 3๊ฐ ๋จ์๊ฐ ๊ฐ์ฅ ์งง์ ์์ถ ๋ฐฉ๋ฒ์ด ๋ฉ๋๋ค. ์ด๋ 3๊ฐ ๋จ์๋ก ์๋ฅด๊ณ ๋ง์ง๋ง์ ๋จ๋ ๋ฌธ์์ด์ ๊ทธ๋๋ก ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ถํ ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ค๋ช ํ ๋ฐฉ๋ฒ์ผ๋ก 1๊ฐ ์ด์ ๋จ์๋ก ๋ฌธ์์ด์ ์๋ผ ์์ถํ์ฌ ํํํ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์กฐ๊ฑด
- s์ ๊ธธ์ด๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- s๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
๋ฌธ์ ํ์ด ๊ณผ์
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์์ด์ ์์ถ ์ํค๋ ค๊ณ ํ ๋ ๋ฌธ์์ด ๊ธธ์ด์ ๋ฐ์ ๋์ด๊ฐ๋ ๋จ์๋ก๋ ์์ถ์ด ๋ถ๊ฐํ๋ฏ๋ก ๋ฐ์ ๊ธธ์ด๊น์ง๋ ๋ฐ๋ณต๋ฌธ์ ํตํด ํ์์ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
์ฝ๋
public class StringCompression {
public static void main(String[] args) {
System.out.println("์ ๋ต ๋ญ๋ : " + new StringCompression().solution("asdfasdfasdfasdf"));
}
public int solution(String s) {
int answer = Integer.MAX_VALUE;
// ๋ฌธ์์ด ๊ธธ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ
if (s.length() == 1) {
return 1;
}
for (int i = 1; i <= s.length() / 2; i++) {
StringBuilder sb = new StringBuilder();
int count = 0; // ๋ฐ๋ณต ํ์
String target = s.substring(0, i); // ๋ฐ๋ณต ๋์ ๋ฌธ์์ด
for (int j = 0; j <= s.length(); j += i) {
int start = j;
int end = Math.min(i + j, s.length());
String temp = s.substring(start, end);
if (temp.equals(target)) {
count++;
} else {
// ๋ฐ๋ณต ํ์๊ฐ 1์ด๋ฉด ์์ถ ๋ฌธ์์ด์ ์ซ์๋ฅผ ๋ฃ์ง ์๋๋ค.
if (count > 1) {
sb.append(count);
}
sb.append(target);
target = temp;
count = 1;
}
}
// ๋ฐ๋ณต ํ์๊ฐ 1์ด๋ฉด ์์ถ ๋ฌธ์์ด์ ์ซ์๋ฅผ ๋ฃ์ง ์๋๋ค.
if (count > 1) {
sb.append(count);
}
sb.append(target);
answer = Math.min(answer, sb.length());
}
return answer;
}
}
'๐ Algorithm > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022.06.15 ใLv.2 ์คํ์ฑํ ๋ฐฉใ (0) | 2022.06.15 |
---|---|
2022.06.14 ใLv.2 ๋ฉ์ฉกํ ์ฌ๊ฐํใ (0) | 2022.06.14 |
2022.05.31 ใLv.3 ๋์คํฌ ์ปจํธ๋กค๋ฌใ (0) | 2022.05.31 |
2022.05.24 ใLv.3 ์ ๊ตญ์ฌ์ฌใ (0) | 2022.05.24 |
2022.05.18 ใLv.2 Heap ๋ ๋งต๊ฒใ (0) | 2022.05.18 |