문제 소개
오직 '+' 또는 '-' 기호만으로 이루어진 문자열이 주어질 때, 문자열 전체의 중화(neutralisation) 결과를 계산하여 '+' 또는 '-'를 반환하는 JavaScript 함수를 작성해야 합니다.
중화 규칙은 다음과 같습니다.
- '++' → '+'
- '--' → '+'
- '-+' 또는 '+-' → '-'
즉, 같은 기호가 만나면 '+'가 되고, 서로 다른 기호가 만나면 '-'가 됩니다. 곱셈 부호 규칙과 유사하게 동작한다고 생각하면 이해하기 쉽습니다.
예시 문자열
const str = '+++-+-++---+-+--+-';
구현 코드
다음은 split()과 reduce() 메서드를 활용한 해결 코드입니다.
const str = '+++-+-++---+-+--+-';
const netResult = (str = '') => {
const strArr = str.split('');
return strArr.reduce((acc, val) => {
if(acc === val){
return '+';
};
return '-';
});
};
console.log(netResult(str));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
-
코드 동작 원리
이 코드의 동작 과정을 단계별로 살펴보겠습니다.
- 문자열 분리:
split('')을 사용해 문자열을 한 글자씩 나눈 배열로 변환합니다. - 순차적 중화:
reduce()가 배열을 순회하면서 누적값(acc)과 현재값(val)을 하나씩 비교합니다. - 기호 판정: 두 값이 같으면 '+'를, 다르면 '-'를 반환하고, 그 결과가 다음 순회의 누적값이 됩니다.
- 최종 결과: 모든 문자를 처리한 뒤 마지막에 남은 단 하나의 기호가 전체 중화 결과가 됩니다.
이처럼 reduce()를 활용하면 별도의 반복문 없이도 간결하고 가독성 좋게 문자열 중화 로직을 구현할 수 있습니다.