ํ์ด ์ธ์ด
Kotlin
์ฝ๋
fun solution(s: String): Int {
var minLength = s.length
for (i in 0 until s.length / 2) {
var subString = s.slice(0..i)
var answer = ""
var cnt = 1
var last = 0
for (j in i + 1 until s.length - i step i + 1) {
// ๋ง์ง๋ง Index ๋ฅผ ์ ์ฅํ๋ค.
last = j + i + 1
// ๊ฐ์ SubString ์ธ ๊ฒฝ์ฐ ์ด๋ฅผ ์นด์ดํธํ๋ค.
if (subString == s.slice(j..j + i)) cnt += 1
// ๋ค๋ฅธ SubString ์ธ ๊ฒฝ์ฐ
else {
if (cnt > 1) {
// ์ซ์ + SubString ์ผ๋ก ๋ณํํ๋ค.
answer += cnt.toString() + subString
} else {
answer += subString
}
// SubString ์ ์๋กญ๊ฒ ์ค์ ํ๋ค.
subString = s.slice(j..j + i)
cnt = 1
}
}
// ํ ๋ฒ ๋ ์งํํ๋ค.
if (cnt > 1) {
answer += cnt.toString() + subString
} else {
answer += subString
}
// ๋จ์ ์๋ ๋ฌธ์์ด์ ์ถ๊ฐํ๋ค.
answer += s.slice(last until s.length)
// ๋ฌธ์์ด์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ค.
if (minLength > answer.length) minLength = answer.length
}
return minLength
}
ํ์ด ๋ฐฉ๋ฒ
์ด ๋ฌธ์ ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฌธ์์ด์ Slice
ํ ๋ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ๋งํผ ๋๋์ด์ผํ๋ค๋ ๊ฒ์ด๋ค. ๋ง์ง๋ง ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ณด๋ฉด xababcdcdababcdcd
(17์) ๋ก ๋์ด์๋๋ฐ x / ababcdcd/ ababcdcd
์ด๋ฐ ์์ผ๋ก ๋์ผ๋ฉด x2ababcdcd
๋ก ์์ถ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ๋งํผ ๋๋์ด์ผํ๋ค๋ ๊ท์น์ด ์์ผ๋ฏ๋ก ์ด๋ฐ ์์ผ๋ก ๋๋๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ด๋ฅผ ์ผ๋ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์. ๋ก์ง์ ๋จ์ํ๋ค. ๋ฌธ์์ด์ ํน์ ํ ํฌ๊ธฐ์ ๋ฐ๋ผ Slice
๋ฅผ ์งํํ๋ฉด ๋๋ค.
1. ์ด ๋, ๋ฌธ์์ด์ ๋๋๋ SubString
์ ํฌ๊ธฐ๋ 1 ~ ๋ฌธ์์ด์ ํฌ๊ธฐ/2
๊ฐ ๋ ์ ์๋ค.
2. ๊ฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ์์ ํ์์ ์งํํ๋ค.
3. ์์์ ์ค์ ํ SubString๊ณผ ๊ฐ์ SubString ์ด ๋ฐ๊ฒฌ๋๋ฉด ์ด๋ฅผ ์นด์ดํธํ๋ค.
4. ๋ค๋ฅธ SubString ์ด ๋์จ ๊ฒฝ์ฐ ์์์ ์นด์ดํธํ SubString์ ์ซ์ + SubString์ผ๋ก ์นํํ๋ค.
5. ๋ค๋ฅธ SubString ์ ์๋ก์ด SubString ์ผ๋ก ์ค์ ํ๊ณ ์ก๊ณ ํ์์ ๊ณ์ํ๋ค.
ํ์ ์๋ฃ ์ดํ์ ๋จ์ ๋ฌธ์์ด์ด ์์ ์ ์๋ค. ์ด๋ฅผ ์ํด ๋ง์ง๋ง Index
๋ฅผ ์ ์ฅํ๊ณ ์ด๋ฅผ ํ์ฉํด์ ๋จ์ ๋ฌธ์์ด์ ๋ ํด์ฃผ๋ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ค.
๊ฒฐ๊ณผ
'โ๏ธ ์ฝํ ์ค๋น > String' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์์ด / Kotlin] 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ - ํํ (0) | 2022.03.22 |
---|---|
[๋ฌธ์์ด / Kotlin] 2019 KAKAO BLIND RECRUITMENT - ์คํ์ฑํ ๋ฐฉ (0) | 2022.03.13 |