직렬과 병렬 저항의 기본 공식
물리학에서 저항 3개를 직렬(series)로 연결했을 때의 등가저항은 다음과 같이 구합니다.
R = R1 + R2 + R3
반면 같은 저항들을 병렬(parallel)로 연결했을 때는 다음 관계식이 성립합니다.
1/R = (1/R1) + (1/R2) + (1/R3)
즉, 병렬 연결에서는 각 저항의 역수를 모두 더한 뒤, 마지막에 다시 역수를 취해야 올바른 등가저항을 얻을 수 있습니다.
문제 요구 사항
여기서 작성해야 할 JavaScript 함수는 다음 두 가지를 인자로 받습니다.
- 연결 방식: 'series'(직렬) 또는 'parallel'(병렬) 두 값 중 하나를 가지는 문자열
- 저항값 목록: n개 저항의 저항값을 나타내는 숫자들
그리고 함수는 이 저항들의 등가저항을 반환해야 합니다.
구현 예제
나머지 매개변수(rest parameter)와 배열의 reduce() 메서드를 활용하면 다음과 같이 간결하게 구현할 수 있습니다.
const r1 = 5, r2 = 7, r3 = 9;
const equivalentResistance = (combination = 'parallel', ...resistors) => {
if (combination === 'parallel') {
// 각 저항 역수의 합을 구한 뒤, 전체의 역수를 취한다
return 1 / resistors.reduce((acc, val) => acc + (1 / val), 0);
}
// 직렬 연결은 단순히 모든 저항값을 더한다
return resistors.reduce((acc, val) => acc + val, 0);
};
console.log(equivalentResistance('parallel', r1, r2, r3));
console.log(equivalentResistance('series', r1, r2, r3));
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
2.202797202797203
21
병렬로 연결하면 등가저항이 약 2.20Ω으로 줄어들고, 직렬로 연결하면 21Ω이 됩니다. 같은 저항이라도 연결 방식에 따라 합성저항이 크게 달라진다는 점을 확인할 수 있습니다.
코드 설명 및 주의 사항
- 나머지 매개변수(...resistors): 저항 개수가 몇 개든 상관없이 인자를 배열 형태로 받아 유연하게 처리할 수 있습니다.
- reduce()의 초기값: 초기값 0을 명시하면 인자가 하나뿐인 경우나 빈 배열이 전달될 때도 안전하게 동작합니다.
- 흔한 실수: 병렬 계산에서 reduce 콜백을 (1/acc) + (1/val)처럼 작성하면 누적 과정마다 중간 결과의 역수가 반복해서 계산되어 엉뚱한 값이 나옵니다. 반드시 "역수의 합"을 누적한 뒤 마지막에 한 번만 역수를 취해야 합니다.