๋ฌธ์ ์ค๋ช
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ ์ดํผ์น๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ์์ด์์ ๊ฐ์ ๊ฐ์ด ์ฐ์ํด์ ๋ํ๋๋ ๊ฒ์ ๊ทธ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ณต๋๋ ๊ฐ์ผ๋ก ํํํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ์ค์ฌ์ ํํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก 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๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | result |
"aabbaccc" | 7 |
"ababcdcdababcdcd" | 9 |
"abcabcdede" | 8 |
"abcabcabcabcdededededede" | 14 |
"xababcdcdababcdcd" | 17 |
ํ์ด: ์ฐ์ s๋ฅผ ๊ฐ์ฅ ํฐ ๋จ์๋ก ๋๋ ๊ฑด ๋ฐ์ผ๋ก ๋๋ด์ ๋ ๋๋ ์ง๋์ด๋ค. ๊ทธ๋์ ๋ฐ๊นฅ์ชฝ while๋ฌธ์ ์กฐ๊ฑด์
a๋ฅผ s.count/2๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋๋ง ๋ฐ๋ณตํ๋ผ๊ณ ์ค์ ํด๋์๋ค. ๊ทธ๋ฆฌ๊ณ a๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ์ฃผ์ด ๋ช๊ฐ๋ก ์ง๋ฅผ์ง๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค.
๊ทธ๋ฆฌ๊ณค ์์ชฝ while๋ฌธ์ x๋ผ๋ ๋ณ์๊ฐ a๋งํผ s๋ฅผ ์ฐจ๋ก์ฐจ๋ก ๋ณด๋๋ฐ s์ ๊ธธ์ด๋ฅผ ๋์ด๊ฐ๋ฉด ์์ชฝ while๋ฌธ์ ์กฐ๊ฑด์ผ๋ก ์ค์ ํ๋ค.
๊ทธ๋ฆฌ๊ณค suffix๋ฅผ ์ด์ฉํ์ฌ s์์ x๋งํผ ์ด๋ํ ๊ธ์ ๋บ ๊ฒ์ ๊ธฐ๋กํ๋ remainder์ ์ ์ฅ
๊ทธ๋ฆฌ๊ณ prefix๋ฅผ ์ด์ฉํ์ฌ s์์ x๋งํผ ์ด๋ํ ๊ธ์๋ฅผ prefix์ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณค pre๋ผ๋ ๋ณ์์ ์ prefix์ ๋ฌธ์์ ํ์ฌ prefix๋ฅผ ๋น๊ตํ์ฌ ๊ฐ๋ค๋ฉด count๋ฅผ +1ํด์ฃผ๊ณ x๋ a๋งํผ ๋ํด์ค ๋ค continue๋ฅผ ํด์ค๋ค.
๋ง์ฝ ๋ค๋ฅด๋ฉด answer์ count์ ๊ทธ ์ ๋ฌธ์๋ฅผ ๋ํด์ค๋ค. ํ์ง๋ง count๊ฐ ๋ณํ์์ด 1์ด๋ผ๋ฉด ๊ทธ๋ฅ answer์ pre๋ง ๋ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ x๊ฐ a๋งํผ ๋ํด์ ธ์ s.count๋ฅผ ๋์ด๊ฐ์ง๋ง s์ ๋จ์์๋ ๋ฌธ์๋ฅผ ๋ง์ ๋ํด์ฃผ๊ธฐ ์ํด
answer์ s.suffix9(s.count-(x-a)๋ฅผ ๋ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณค answerarr๋ผ๋ answer์ ํฌ๊ธฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์์ค๋ค.
๊ทธ๋ฆฌ๊ณ min()์ ์ด์ฉํด answerarr์ ๊ฐ์ฅ ์์ ์๋ฅผ ๋ฐํํด์ค๋ค.
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
|
import Foundation
func solution(_ s:String) -> Int {
var answerarr = [Int]()
var a = 0
while a <= s.count/2 {
var x = 0
var count = 1
var pre = ""
var answer = ""
a += 1
while x <= s.count {
let remainder = s.suffix(s.count-x)
if pre == prefix {
count += 1
x += a
continue
}
if count > 1 {
answer += "\(count)\(pre)"
}
answer += pre
pre = String(prefix)
count = 1
x += a
}
answer += String(s.suffix(s.count-(x-a)))
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์กฐ์ด์คํฑ Swift (0) | 2020.04.09 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ํฐ ์ ๋ง๋ค๊ธฐ Swift (0) | 2020.04.04 |
ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ง๋๊ธฐ Swift (0) | 2020.03.28 |
ํ๋ก๊ทธ๋๋จธ์ค ์คํฌํธ๋ฆฌ Swift (0) | 2020.03.25 |
ํ๋ก๊ทธ๋๋จธ์ค ๊ธฐ๋ฅ๊ฐ๋ฐ Swift (0) | 2020.03.23 |
๋๊ธ