January 09, 2021
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
- s는 알파벳 소문자로만 이루어져 있습니다.
Input
- 압축할 문자열
output
- 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이
Math.ceil(length/2)
까지 반복한다.const zip = (src: string, n: number): number
자료구조
queue에 담긴 문자열을 순회한다
스택에 담긴 문자열을 n<요소> 형태로 바꾼다.
const zip = (src, n) => {
var re = new RegExp(`([a-z]{${n}})`)
const queue = src.split(re).filter(s => s.length)
const stack = []
const repeat = []
queue.forEach(s => {
if (stack[stack.length - 1] !== s) {
stack.push(s)
repeat.push(1)
} else {
repeat[repeat.length - 1]++
}
})
const result = stack.map((s, i) => (repeat[i] === 1 ? '' : repeat[i]) + s)
return result.join('').length
}
function solution(s) {
let min = s.length
for (let i = 1; i <= Math.floor(s.length / 2); i++) {
const result = zip(s, i)
min = result < min ? result : min
}
return min
}