https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
https://nodingco.tistory.com/50
[JAVA] 프로그래머스 60057.문자열압축 (Lv.2)
https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데.
nodingco.tistory.com
접근 방법은 위의 JAVA 풀이에서 확인할 수 있습니다.
JavaScript에서 String을 Array로 바꿔주는 방법은 스프레드연산자, Array.from() 메소드, split()메소드 등 여러가지가 있습니다. 결과는 동일합니다.JavaScript에서 / 연산은 기본적으로 소수점까지 나눠버리기 때문에 몫을 구하고 싶으면 parseInt()로 계산식을 감싸줘야합니다.
function solution(s) {
const strArr = [...s]
//const strArr = Array.from(s)
//const strArr = s.split('')
let answer = strArr.length;
//console.log(strArr)
for (let i = 1; i <= strArr.length / 2; i++) {
let count = i;
let idx = 0;
let now = i;
let duple = 0;
for (; now < strArr.length - (strArr.length % i); now += i) {
let flag = true;
for (var j = 0; j < i; j++) {
if (strArr[idx + j] !== strArr[now + j]) {
flag = false;
break;
}
}
if (flag) {
duple = (duple === 0) ? 2 : ++duple;
} else {
idx = now;
if (parseInt(duple / 100) != 0) {
count += 3;
} else if (parseInt(duple / 10) !== 0) {
count += 2;
} else if (duple !== 0) {
count++;
}
count += i;
duple = 0;
}
//console.log("count", count, " duple",duple)
}
if (parseInt(duple / 100) !== 0) {
count += 3;
} else if (parseInt(duple / 10) !== 0) {
count += 2;
} else if (duple !== 0) {
count++;
}
duple = 0;
//console.log(s,i,count," + ", (strArr.length % i))
answer = Math.min(answer, count + (strArr.length % i));
}
return answer;
}
const input = ["aabbaccc","ababcdcdababcdcd","abcabcdede","abcabcabcabcdededededede","xababcdcdababcdcd"]
for(let i = 0; i < 5; i++){
console.log(solution(input[i]))
}
//console.log(solution(input[0]))
'🔍 알고리즘 > 프로그래머스 JavaScript' 카테고리의 다른 글
[JavaScript] 프로그래머스 77484.로또의 최고 순위와 최저 순위 (Lv.1) (0) | 2022.05.30 |
---|