๐ฅDAY +12
https://programmers.co.kr/learn/courses/30/lessons/60057?language=java
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ฌธ์์ด ์์ถ
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ "์ดํผ์น"๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ
programmers.co.kr
> ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด ๋๋ณด๊ธฐ ํด๋ฆญ!
๋ฌธ์ ์ค๋ช
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ "์ดํผ์น"๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ์์ด์์ ๊ฐ์ ๊ฐ์ด ์ฐ์ํด์ ๋ํ๋๋ ๊ฒ์ ๊ทธ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ณต๋๋ ๊ฐ์ผ๋ก ํํํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ์ค์ฌ์ ํํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก "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๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
"aabbaccc" | 7 |
"ababcdcdababcdcd" | 9 |
"abcabcdede" | 8 |
"abcabcabcabcdededededede" | 14 |
"xababcdcdababcdcd" | 17 |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์์ด์ 1๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
๋ฌธ์์ด์ 8๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #3
๋ฌธ์์ด์ 3๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #4
๋ฌธ์์ด์ 2๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด "abcabcabcabc6de" ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 3๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด "4abcdededededede" ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 4๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด "abcabcabcabc3dede" ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 6๊ฐ ๋จ์๋ก ์๋ฅผ ๊ฒฝ์ฐ "2abcabc2dedede"๊ฐ ๋๋ฉฐ, ์ด๋์ ๊ธธ์ด๊ฐ 14๋ก ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #5
๋ฌธ์์ด์ ์ ์ผ ์๋ถํฐ ์ ํด์ง ๊ธธ์ด๋งํผ ์๋ผ์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ๋ฌธ์์ด์ x / ababcdcd / ababcdcd ๋ก ์๋ฅด๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋ฌธ์์ด์ ์๋ผ๋ ์์ถ๋์ง ์์ผ๋ฏ๋ก ๊ฐ์ฅ ์งง์ ๊ธธ์ด๋ 17์ด ๋ฉ๋๋ค.
๐ฅ [๋ก์ง]
์ต์ ์ ์์ถ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํ๋ฒ์ ์์ถํ ๋ฌธ์์ ์๋ฅผ cut์ผ๋ก ๋๊ณ for๋ฌธ์ ์ด์ฉํด ๊ฐ์ ๊ณ์ ์ธก์ ํ๋ฉด์ ์ต์ ๊ธธ์ด๋ฅผ ์ฐพ๋๋ค.
์ฒซ๋ฒ์งธ ๋ฌธ๋จ์์๋ cut์ ์๋ฅผ ๋ฐํ์ผ๋ก list ๋ผ๋ ์คํธ๋ง ๋ฐฐ์ด์ ์ ์ธํด (1)์๋ผ์ง ๋ฌธ์์ด ๊ฐ์ ์ ์ฅํ๋ค.
์์๋ก aabbaccc๊ฐ ์ฃผ์ด์ก์ ๋, cut์ด 2์ธ ๊ฒฝ์ฐ
list[0] = "aa"
list[1] = "bb"
list[2] = "ac"
list[3] = "cc"
์ ํ์์ผ๋ก ๋ด๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๋ถ while๋ฌธ์ ๋์ด list์ ๊ฐ์ ๋๋ฉด์ (2)์ต์๊ฐ์ ๊ฐฑ์ ํด์ค๋ค!
์์ถํ์๋ ๊ฐ์ด ์งง์์ง๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์ค๋ณต์ด ์๊ฒผ์ ๊ฒฝ์ฐ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ค๋ณต์ ์ธ๋ ๋ณ์์ธ dupCnt์ ์ ์ธ ๋ฐ ์ด๊ธฐํํด์ค๋ค.
๋ํ ํด๋น cnt์์์ ๋ฌธ์์ด ๊ธธ์ด๊ฐ(l)์ ์ฃผ์ด์ง ๋ฌธ์์ด s์ ๊ธธ์ด๋ก ์ด๊ธฐ ์ค์ ํด์ค๋ค.(์ค๋ณต์ด ์๊ธฐ์ง ์์์ ๊ฒฝ์ฐ์์์ ์ต์๊ฐ์ด ๋๋ค.)
list[i]๊ฐ๊ณผ list[i+1]๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ณต์ ์๋ฏธํ๋ฏ๋ก dupCnt๊ฐ์ 1 ์ฆ๊ฐํด์ค๋ค.
dupCnt๊ฐ์ ๋ฐ๋ผ์ l์ ๊ฐฑ์ ๋ฐฉ๋ฒ ๋ํ ๋ค๋ฅด๋ค.
์ฒ์์ผ๋ก ์ค๋ณต๋๋ ๊ฒฝ์ฐ (dupCnt == 1), ์ค๋ณต๋๋ ๋ฌธ์์ด์ ์์ ์ซ์๊ฐ ๋ถ๊ธฐ ๋๋ฌธ์ ๊ธธ์ด-cnt+1์ ํด์ค์ผ ํ๋ค.
์ค๋ณต์ด 2๋ฒ ์ด์์ธ ๊ฒฝ์ฐ (dupCnt > 1), cut์ ๊ฐ์๋งํผ ๋นผ์ฃผ๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์ ๊ณ ๋ คํด์ผ ํ๋ ์ถ๊ฐ์ ์ธ ์ฌํญ์ด 10๋ฒ, 100๋ฒ, 1000๋ฒ๊ณผ ๊ฐ์ด ์ค๋ณต ์นด์ดํธ์ ์๋ฆฟ์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ์ด๋ค! ์ด๋ด๋ ๊ฐ๊ฐ 1์ฉ ๋ํด์ฃผ๋๋ก ํ๋ค.
์ด๋ ๊ฒ ํด์ ๊ณ์ฐ๋ ์ต์ข l์ ๊ฐ์ด ๊ธฐ์กด์ ๋์ ๋ ์ต์๊ฐ์ธ min๋ณด๋ค ์์์ง๋ฅผ ํ๋ณํ๊ณ , ์์ผ๋ฉด min์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
๐ฅ [์ต์ข ์ฝ๋]
class Solution {
public int solution(String s) {
int length = s.length();
int min = length;
for(int cut = 1; cut <= (length/2); cut++) {
String[] list = new String[length/cut];
for(int idx = 0; idx<(length/cut); idx++) {
if((idx+1)*cut <= length) {
list[idx] = s.substring(idx*cut, (idx+1)*cut);
}
}
int i = 0;
int dupCnt = 0;
int l = length;
while(i+1 < list.length) {
if(list[i].equals(list[i+1])){
dupCnt++;
i++;
if(dupCnt == 1) {
l = l - cut + 1;
} else if(dupCnt > 1) {
l = l - cut;
if(dupCnt == 9) {
l++;
} else if(dupCnt == 99){
l++;
} else if(dupCnt == 999) {
l++;
}
}
} else {
dupCnt = 0;
i++;
}
}
if(l < min) {
min = l;
}
}
return min;
}
}
๐ฅ [์๊ฐ]
๋๋์ด 2๋จ๊ณ๋ฅผ ๋์ ํ๋ค! ๋ฌธ์ ๋ฅผ ์ฒ์ ๋ณด๊ณ ์๊ฐํ๋๊ฒ๋ณด๋ค๋ ๋์ด๋๊ฐ ๋์์ ์ค๋ซ๋์ ํค๋ฉจ๋ค.
์ค๋ณต ๊ฐ์์ ์๋ฆฟ์๊ฐ ๋ฐ๊ผ์ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌ๋ฅผ ์ข ํจ์จ์ ์ด์ง ๋ชปํ๊ฒ ์ง ๊ฒ ๊ฐ์๋ฐ ๋ฌ๋ฆฌ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง ์์์ ๊ฒฐ๊ตญ์ ์ด๋ ๊ฒ ์ ์ถํ๋ค ใ ใ
๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐพ์๋ดค๋๋ฐ.. ์ด๋ฒ ๋ฌธ์ ๊ฐ ์ ๋ํ ๋จ๋ค์ ํ์ด๊ฐ ์ดํด๊ฐ ์๊ฐ๋ ๊ฒ ๊ฐ๋ค.
์ ๋๋ก ๋ค์ํ๋ฒ ๋ณด๊ณ ๋ด๊ฐ ์ด์ฉํ ์ ์์๋งํ ์ฝ๋๋ฅผ ์ฐพ์์ ์ถ๊ฐํด์ผ๊ฒ ๋ค.
์ฝํ ์ค๋น๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ์ง ์ผ๋ง ๋์ง ์์ ์ฝ๋์ ๋ฏธํกํ ์ ์ด ๋ง์ ์ ์์ต๋๋ค.
๋ถ์กฑํ ์ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ์์ผ๋ก์ ํฌ์คํ ์ ๋ฐ์ํ๊ฒ ์ต๋๋ค! ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค :)
-budtree