ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฅ ๋ฌธ์
์์ถํ ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ค๋ช ํ ๋ฐฉ๋ฒ์ผ๋ก 1๊ฐ ์ด์ ๋จ์๋ก ๋ฌธ์์ด์ ์๋ผ ์์ถํ์ฌ ํํํ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ค ํ์ด ๋ฐฉ๋ฒ
- ๋ณ์
s
: [String] : ์์ถํ ๋ฌธ์์ดcompressedS: [String]
: ์์ถ๋ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์งง์ ๋ฌธ์์ดstart: Int
: ๋น๊ต์ ๊ธฐ์ค์ด ๋๋ ๋ฌธ์์ด์ ์์ ์ธ๋ฑ์คcurrent: Int
: ๋น๊ต์ค์ธ ์ธ๋ฑ์คnum: Int
: ์์ถ์ด ๊ฐ๋ฅํ ๊ฐ์tmp: [string]
: ์์ถ๋ ๋ฌธ์์ด
for i in 1...s.count/2 + 1 {}
- 1๊ฐ ~ s.count/2๊ฐ์ ๋ฌธ์์ด ๋จ์๋ก ์์ถํ๊ธฐ ์ํ์ฌ ๋ฐ๋ณตํ๋ค.
while current+i-1 < s.count && s[start...start+i-1] == s[current...current+i-1] {}
- ๋น๊ต์ ๊ธฐ์ค์ด ๋๋ ๋ฌธ์์ด๊ณผ ๋๋จธ์ง ๋ฌธ์์ด์ ๋น๊ตํ๋ค.
- ๋ฌธ์์ด์ด ์ฐ์๋๋ฉด ์ฐ์๋๋ ํ์๋งํผ num์ +1 ํด์ค๋ค.
- 2๋ฒ ์ด์ ๋ฐ๋ณต๋ ๊ฒฝ์ฐ, ์ฆ num์ด 2 ์ด์์ผ ๊ฒฝ์ฐ
tmp.append(String(num))
tmp.append(contentsOf: s[start...start+i-1])
- num๊ณผ ๊ธฐ์ค ๋ฌธ์์ด์ ๋ฃ์ด ์์ถํ๋ค.
tmp.append(contentsOf: s[start...start+i-1])
- ์์ถ์ด ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ์ค ๋ฌธ์์ด๋ง ๋ฃ๋๋ค.
- ๋ชจ๋ ๋น๊ต๊ฐ ๋๋๊ณ ๋จ์ ๋ฌธ์์ด์ ๋ฃ๋๋ค.
compressedS = tmp == [] || compressedS.count < tmp.count ? compressedS : tmp
- compressedS์ tmp๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ฅ ์งง์ ๋ฌธ์์ด์ compressedS์ ๋ฃ๋๋ค.
return compressedS.map{$0}.reduce("", +).count
- ๋ชจ๋ ๊ณผ์ ์ด ๋๋๋ฉด compressedS์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๋ค.
๐ฉ๐ป๐ป Swift Code
import Foundation
func solution(_ s:String) -> Int {
let s = s.map{String($0)}
var compressedS = s
// 1 ~ s.count/2 ๊ฐ์ ๋ฌธ์์ด ๋จ์
for i in 1...s.count/2 + 1 {
var start = 0
var current = i
var num = 1
var tmp: [String] = []
while current < s.count {
// i๊ฐ์ ๋ฌธ์์ด ๋จ์๋ก ๋น๊ต
while current+i-1 < s.count && s[start...start+i-1] == s[current...current+i-1] {
current += i
num += 1
}
// ์์ถ, 2์ด์ ๋ฐ๋ณต๋๋ฉด ๋ฐ๋ณต๋ ํ์ ์ถ๊ฐ
if num > 1 {
tmp.append(String(num))
tmp.append(contentsOf: s[start...start+i-1])
} else {
tmp.append(contentsOf: s[start...start+i-1])
}
// ์์ถ๋์ง ์์ ๋ฌธ์์ด์ ์ถ๊ฐ
if current >= s.count - i && current < s.count {
while current < s.count {
tmp.append(s[current])
current += 1
}
}
start = current
current += i
num = 1
}
compressedS = tmp == [] || compressedS.count < tmp.count ? compressedS : tmp
}
return compressedS.map{$0}.reduce("", +).count
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํผ๋ณด๋์น ์ (๋์ ๊ณํ๋ฒ, ๋ชจ๋๋ฌ ์ฐ์ฐ) (0) | 2021.04.18 |
---|---|
[Algorithm] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (์ ํด๋ฆฌ๋ ํธ์ ๋ฒ) (0) | 2021.04.18 |
[Alogorithm] ๋ฌธ์์ด ๋ด ๋ง์๋๋ก ์ ๋ ฌํ๊ธฐ (0) | 2021.04.16 |
[Algorithm] ์ฒด์ก๋ณต (ํ์๋ฒ(Greedy)) (0) | 2021.04.16 |
[Algorithm] [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ (abs()) (0) | 2021.04.06 |
๋๊ธ
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ternary
- ๋ฌ๋ ฅ
- UISearchController
- ํ๋ก๊ทธ๋๋จธ์ค
- Kakao
- Firebase
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
- ์ต์๊ณต๋ฐฐ์
- Baekjoon
- calendar
- map
- IOS
- programmers
- java
- SWIFT
- mysql
- BOJ
- iTunes Search API
- ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ
- compactMap
- abs()
- ๊น์ด ์ฐ์ ํ์
- Algorithm
- Git
- ๋ณ์ก
- TIL
- ์๋กํ ์คํ ๋ค์ค์ ์ฒด
- DFS
- sql
- ์ต๋๊ณต์ฝ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ