문자열 압축 lv2
https://school.programmers.co.kr/learn/courses/30/lessons/60057
참 신기한게, 딱 한 케이스 빼고 다 통과했다...
뭘까?
그리고 한케이스 틀리는 데까지 47분 걸렸다. 갈 길이 머니까 뛰어가야지!
function solution(s) {
var answer = 0;
let mini = new Array(1001)
mini.fill('a')
mini = mini.join('')
for(let i = 1; i <= Math.round(s.length/2) ; i++){
let str = ''
let count = 0
let now = s.slice(0,0+i)
for(let j = 0; j < s.length ; j += i){
if(now === s.slice(j,j+i)){
count ++
}
else{
str += count === 1 ? now : count.toString()+now
now = s.slice(j,j+i)
count = 1
}
if(j+i >= s.length){
str += count === 1 ? now : count.toString()+now
}
}
if(mini.length > str.length){
mini = str
}
}
answer = mini.length
return answer;
}
이 문제에서 내가 배웠던 점은
제일 처음에 mini
의 길이를 정하는 방법이다.
일단 s
로 들어오는 문자열의 최대 길이는 1000이기 때문에 mini의 길이가 1001이면 된다.
근데 문자열 길이 정의하는 방법을 몰라 배열로 만들고 다시 join으로 묶어 1001 길이의 문자열을 만들어 주었다.
굳이 mini를 문자열로 유지할 필요가 없다는 것을 깨달았다.
function solution(s) {
var answer = 0;
let mini = 1001
for(let i = 1; i <= Math.round(s.length/2) ; i++){
let str = ''
let count = 0
let now = s.slice(0,0+i)
for(let j = 0; j < s.length ; j += i){
if(now === s.slice(j,j+i)){
count ++
}
else{
str += count === 1 ? now : count.toString()+now
now = s.slice(j,j+i)
count = 1
}
if(j+i >= s.length){
str += count === 1 ? now : count.toString()+now
}
}
if(mini > str.length){
mini = str.length
}
}
answer = mini
return answer;
}
Math.floor()
Math.round()
Math.ceil()
Math.trunc()