https://school.programmers.co.kr/learn/courses/30/lessons/152996
function solution(weights) {
let count = 0;
const dp = weights.reduce((obj, el) => {
if (obj[el]) count += obj[el]; // 중복되는 거리에 있는 것들 카운팅.
obj[el] = ++obj[el] || 1;
return obj;
}, {});
const [arr, itvDp] = [Object.keys(dp), {}];
// 2 ~ 4 긴갹에 있는 것들 체크 (곱한것을 누적하는 형식)
for (let i = 2; i <= 4; ++i) {
arr.forEach((el) => {
const val = i * el;
if (itvDp[val]) count += dp[el] * itvDp[val];
itvDp[val] = itvDp[val] + dp[el] || dp[el];
});
}
return count;
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] Lv 2. 연속된 부분 수열의 합 (0) | 2023.04.07 |
---|---|
[Programmers] Lv 2. 테이블 해시 함수 (0) | 2023.04.07 |
[Programmers] Lv 2. 혼자 놀기의 달인 (0) | 2023.04.04 |
[Programmers] Lv 2. 숫자 카드 나누기 (0) | 2023.04.04 |
[Programmers] Lv 2. 호텔 대실 (0) | 2023.04.03 |
댓글