문제 상황
0과 1로만 구성된 이진(binary) 문자열을 입력받아, 모든 0은 1로, 모든 1은 0으로 뒤집은 결과를 반환하는 함수를 작성해야 한다고 가정해 보겠습니다. 이러한 연산을 흔히 '역연산' 또는 '비트 반전'이라고 부릅니다.
구현 아이디어
가장 직관적인 접근 방식은 다음 세 단계로 나눌 수 있습니다.
split("")메서드로 문자열을 개별 문자 배열로 분리합니다.map()으로 각 문자를 숫자로 변환한 뒤1 - 숫자를 계산합니다. (0 → 1, 1 → 0)join("")으로 다시 하나의 문자열로 합칩니다.
예제 코드
const num = '1101';
const n = '11010111';
const inverseBinary = (binary) => {
return binary.split("").map(el => {
return `${1 - parseInt(el, 10)}`
}).join("");
};
console.log(inverseBinary(num));
console.log(inverseBinary(n));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
0010
00101000
코드 동작 원리
parseInt(el, 10)은 각 문자를 10진수 정수로 변환합니다. 여기서 1을 빼면 값이 반전됩니다. 예를 들어 문자 '0'은 parseInt를 거쳐 0이 되고, 1 − 0 = 1이므로 '1'로 변환됩니다. 마찬가지로 '1'은 1 − 1 = 0이 되어 '0'으로 바뀝니다.
더 간결한 대안: 정규표현식 활용
replace()와 정규표현식을 사용하면 한 줄로 동일한 기능을 구현할 수 있습니다.
const inverseBinary = (binary) =>
binary.replace(/[01]/g, bit => (bit === '0' ? '1' : '0'));
두 방법 모두 시간 복잡도는 O(n)으로 문자열 길이에 비례하며, 짧은 유틸리티 함수로 실무에서도 유용하게 활용할 수 있습니다.