[programmers] Lv2. 文字列圧縮JavaScript|protect-me
14221 ワード
🕊 Link
Lv2. 文字列圧縮JavaScript
https://programmers.co.kr/learn/courses/30/lessons/60057
🧑🏻💻 Code(javascript)
以前学んだ正規表現が主導的な問題を占めている.
現在回転している配列の長さを減らすと、繰り返し文自体が歪む可能性があるため、0を加えることで解決できます.22021.04.20- が最初に作成されました.
Lv2. 文字列圧縮JavaScript
https://programmers.co.kr/learn/courses/30/lessons/60057
🧑🏻💻 Code(javascript)
function solution(s) {
let min = s.length;
for (let cutLength = 1; cutLength <= s.length / 2; cutLength++) {
let regex = new RegExp(`.{1,${cutLength}}`, "g");
const arr = s.match(regex);
for (let i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
let front = arr[i - 1];
if (typeof front === "number") {
arr[i] = arr[i - 1] + 1;
arr[i - 1] = 0;
} else {
arr.splice(i, 1, 2);
}
}
const currentLength = arr.reduce((acc, cur) => {
return cur !== 0 ? acc + String(cur).length : acc;
}, 0);
if (min > currentLength) min = currentLength;
}
}
return min;
}
💡 Solutionfunction solution(s) {
let min = s.length;
// s.length / 2 보다 크면 압축이 더 이상 일어날 수 없음.
for (let cutLength = 1; cutLength <= s.length / 2; cutLength++) {
// cutLength 길이로 나누어주는 정규표현식
let regex = new RegExp(`.{1,${cutLength}}`, "g");
const arr = s.match(regex);
for (let i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
// arr[i] 와 arr[i+1]은 경우
let front = arr[i - 1];
if (typeof front === "number") {
// 앞의 숫자가 number 타입인 경우
// arr[i]에 기존 앞의 숫자 +1을 할당, 앞의 숫자를 0으로 할당
arr[i] = arr[i - 1] + 1;
arr[i - 1] = 0;
} else {
// 앞의 숫자가 number가 아닌 경우 숫자 2로 대체
arr.splice(i, 1, 2);
}
}
// arr를 돌면서 0이면 넘어가고, 0이 아니면 그 글자 수를 더해줌.
const currentLength = arr.reduce((acc, cur) => {
return cur !== 0 ? acc + String(cur).length : acc;
}, 0);
// 최소값 업데이트
if (min > currentLength) min = currentLength;
}
}
return min;
}
👨🏻💻💭 Self Feedback以前学んだ正規表現が主導的な問題を占めている.
現在回転している配列の長さを減らすと、繰り返し文自体が歪む可能性があるため、0を加えることで解決できます.
댓글 환영
질문 환영
by.protect-me
Reference
この問題について([programmers] Lv2. 文字列圧縮JavaScript|protect-me), 我々は、より多くの情報をここで見つけました https://velog.io/@protect-me/programmers-Lv2.-문자열-압축-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol