function solution(s) {
if (s.length === 1) return 1;
// make data
var length = Math.floor(s.length/2);
var data = new Array(length).fill(null).map(() => new Array());
for (let i = 1; i <= length; i++) {
for (let j = 0; j < s.length; j += i) {
data[i-1].push(s.substr(j, i))
}
}
// compression
var answer = data.map((arr) => {
let num = 1;
return arr.reduce((acc, char, idx, org) => {
if (org[idx+1] === char) {
num++;
} else {
num !== 1 ? acc.push(num, char) : acc.push(char);
num = 1;
}
return acc;
}, []).join("").length;
});
// return min length
return Math.min(...answer);
}
흐름도 가독성도 마음에 든다.
2차원 배열 만들 때
new Array(length).fill([]);
new Array(length).fill(new Array());
이런 식으로 짜면 fill 안에서 사용한 array reference가 재사용되어 array 안의 array 들이 사실상 모두 동일한 배열을 가리키고 있어 문제를 일으킨다. 주의하자.
https://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript
- Array. from(Array(2), () => new Array(4))
- Array(2). fill(null). map(() => Array(4))
- Array(2). fill(Array(4)); // BAD! Rows are copied by reference.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level1] 부족한 금액 계산하기 (0) | 2021.08.05 |
---|---|
[프로그래머스][자바스크립트][Level2][카카오] 오픈채팅방 (0) | 2021.07.22 |
[프로그래머스][자바스크립트][Level2] 124 나라의 숫자 (0) | 2021.07.21 |
[프로그래머스][자바스크립트][Level2] 타겟 넘버 (0) | 2021.07.20 |
[프로그래머스][자바스크립트][Level2] 짝지어 제거하기 (0) | 2021.07.20 |
댓글