작성 코드 (1차 시도 / 통과)
function solution(weights) {
let result = 0
const table = Array(4001).fill(0)
const isInt = (n) => n % 1 === 0 ? n : 0 // 실수 판별
weights.forEach(w => {
result += table[w] + table[w * 2] // case 1, case 2
if (isInt(w / 2)) result += table[w / 2] // case 3
if (isInt(w * 2 / 3)) result += table[w * 2 / 3] // case4
if (isInt(w * 3 / 2)) result += table[w * 3 / 2] // case5
if (isInt(w * 3 / 4)) result += table[w * 3 / 4] // case6
if (isInt(w * 4 / 3)) result += table[w * 4 / 3] // case7
table[w] += 1
})
return result
}
구현 로직
문제에서 말하는 균형이 맞는 비율은 중복해서 총 7가지 입니다.
1:1, 1:2, 2:1, 2:3, 3:2, 3:4, 4:3.
weights를 순회할 때마다 해당 몸무게 값에 해당하는 인덱스를 1증가 하고 비율에 맞는 대상을 모두 찾아 저장된 값을 결괏값에 더해주면 됩니다.
isInt는 해당 값이 정수인지 아닌지를 판별합니다. 몸무게는 정수라고 하였으니 나눠진 값이 소수인 경우에는 계산하지 않습니다.