[프로그래머스 레벨투] 문자열 압축 📠
🔽 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/60057
✍🏼 나의 수도 코드
1) 문자열과 압축 단위 숫자를 매개변수로 받아 압축된 문자열을 반환하는 compress 함수를 만든다.
2) 1부터 s.length / 2 까지 반복문을 통해서, compress 함수를 돌려준다.
3) 반복문 외부에 result 변수를 만들어준다. (result의 초기 값은 s.length)
4) 반복문에서 출력된 결과가 기존 result에 저장된 값보다 작으면 result 값을 재할당한다.
5) 반복문이 다 돌고나면 result를 return한다.
👨🏻💻 나의 문제 풀이
function solution(s) {
let result = s.length
function compress(s, num){
let slicedArr = [];
let condNum = s.length / num;
for(let i = 0; i < condNum; i++){
let slicedStr = s.substring(0, num);
slicedArr.push(slicedStr);
s = s.substring(num);
}
let tempStr = slicedArr[0];
let count = 1;
let compressedStr = "";
for (let i = 1; i < slicedArr.length + 1; i ++){
if(tempStr === slicedArr[i]){
count++;
} else {
if(count === 1){
compressedStr += tempStr;
} else {
compressedStr += count + tempStr;
}
count = 1;
tempStr = slicedArr[i];
}
}
return compressedStr;
}
for(let i = 1; i <= s.length / 2; i++){
let compressed = compress(s, i);
if(compressed.length < result){
result = compressed.length
}
}
return result;
}
👩🏻💻 다른 사람의 코드
const solution = s => {
// 1 ~ s.length 까지가 담긴 Array를 만든다.
const range = [...Array(s.length)].map((_, i) => i + 1);
// 1 ~ s.length까지 map을 돌려 압축해서 하나의 배열에 담고, 이 중 최솟값을 리턴한다.
return Math.min(...range.map(i => compress(s, i).length));
};
// 압축한 문자열을 리턴하는 함수
const compress = (s, n) => {
const make = ([a, l, c]) => `${a}${c > 1 ? c : ''}${l}`;
// ✨ 가장 신기했던 부분 ✨
// 고차함수 reduce를 활용하면서, acc에 해당하는 변수로 [a, l, c]를 설정했다.
// 여기서 a는 압축한 결과, l은 내가 짠 코드에서 tempStr, c는 count에 해당한다.
// 나처럼 굳이 하나씩 변수를 선언하지 않고 배열로 묶었다는 점! 배울만한 점.
return make(
chunk(s, n).reduce(
([a, l, c], e) => e === l ? [a, l, c + 1] : [make([a, l, c]), e, 1],
['', '', 0]
)
);
};
// 문자열을 compress에서 넘겨받은 i를 기준으로 조각내는 함수
const chunk = (s, n) =>
s.length <= n ? [s] : [s.slice(0, n), ...chunk(s.slice(n), n)];
🍯 알게 된 것들
- reduce를 사용할 때 콜백함수의 매개변수 형태를 꼭
(acc, cur)
과 같은 형태로 설정하지 않아도 된다는 점! (내가 원하는 형태로 자유롭게 활용해도 된다는 점을 인지하면서 코드를 짜보자!)
Author And Source
이 문제에 관하여([프로그래머스 레벨투] 문자열 압축 📠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@9rganizedchaos/프로그래머스-레벨투-문자열-압축저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)