반응형
1. 문제
- 2진수 문자열 a와 b가 주어질 때, a + b 연산된 2진수 결과값을 반환하라.
2. 풀이
function addBinary(a: string, b: string): string {
return (BigInt(`0b${a}`) + BigInt(`0b${b}`)).toString(2)
};
- 일단, 처음 문제를 봤을 때 해결 방법은 딱 떠올랐다. 두 2진수를 10진수로 변환하고 더한 뒤, 다시 2진수로 변환하는 방법이었다.
- 이 방식을 몰라서 진법 변환을 찾았고, parseInt와 toString을 이용하면 변환이 가능해서 적용했더니, 주어지는 2진수가 큰 경우 범위를 벗어나 제대로 연산이 이루어지지 않았다.
- 그럼, BigInt를 써보자 했는데 BigInt는 또 진법 변환 방식이 다르더라. 아래에 정리해 본다.
- 일반적인 진법 변환
10진수 -> n진수: target.toString(n);
2진수 -> 10진수: parseInt(target, 2);
2진수 -> 8진수: parseInt(target,2).toString(8);
2진수 -> 16진수: parseInt(target,2).toString(16);
8진수 -> 10진수: parseInt(target, 8);
8진수 -> 2진수: parseInt(target,8).toString(2);
8진수 -> 16진수: parseInt(target,16).toString(16); - BigInt 진법 변환 : BigInt 변환 대상 앞에 prefix를 붙여 해당 대상을 어떤 진법으로 처리할 지 지정할 수 있다.
1. 0b: 2진수로 지정. 0b1010 => 1010이 2진수로 처리.
2. 0o: 8진수로 지정. 0o12 => 12가 8진수로 처리.
3. 0x: 16진수로 지정. 0xA => A가 16진수로 처리.
- 일반적인 진법 변환