이진수 계산기 만들기
- html, css, script 작성하기
조건
제한사항
- 지정된 ID, css 부여할 것
- 모든 표현식은 operand1 -> operator -> operand2 형식으로 입력
- operand1 : 첫 번째 이진수
- operator : 연산자 집합 {+, -, *, =} --> {+, -, *, /} ?
- operand2 : 두 번째 이진수
- 두 피연산자는 이진수에서 십진수로 변환 시 항상 양의 정수
- 모든 표현식이 유효함
나의 풀이
- 정규식을 통해 피연산자와 연산자를 분리
- 연산자 정규식: /[^0-1]/gi
- 피연산자 정규식: /[[0-1]/gi
- 2진수를 10진수로 변환: parseInt(a, 2)
- 10진수를 2진수로 변환: a.toString(2)
- 문자열의 연산을 처리: eval()
- eval() 을 권장하지 않음
- Function 을 이용하여 변환할 수 있음
- ex) Function('return cal_str')().toString(2);
- 관련 코드 (주석으로 설명)
const calc = (val) => {
/*
* 입력된 이진수만 추출
*/
const numbers = val.split(/[^0-1]/gi);
/*
* 연산자 추출
*/
const operator = val.split(/[0-1]/gi).filter(o => o);
if (!operator.length) { // 연산자가 없을 경우 이진수 자체 출력
return val;
}
/*
* 피연산자와 연산자를 조합
* 이진수를 각가 십진수로 변환하여 조합
*/
var cal_str = numbers.reduce((a, b, i) => {
a += parseInt(b, 2); // 추출한 이진수를 추가
if (operator[i]) { // 해당 연산자가 있는 경우 연산자를 추가
a += operator[i];
}
return a;
}, '');
return parseInt((eval(cal_str)).toString(2)); // 10진수 연산 문자열을 eval을 통해 계산 후 이진수화
}
- 전체 소스코드는 아래와 같음
See the Pen Untitled by hee0 (@ryuheeyoung) on CodePen.
결과
이상하게도 처리결과 점수는 만점인데 에러가 난다. 개발자 모드로 봤을 때 api 에러같으나.. 원인은 모르겠음
결과 테스트 이미지 생성하다 에러발생하는 것으로 추정
'HackerRank' 카테고리의 다른 글
[해커랭크] (1Week - Day 1) Mini-Max Sum (javascript) (0) | 2022.08.21 |
---|---|
[해커랭크] Day 4: Classes (0) | 2022.08.19 |
[해커랭크] Day 7: Regular Expressions Ⅱ (javascript) (0) | 2022.08.19 |
[해커랭크] Day 6: Bitwise Operators (javascript) (0) | 2022.08.19 |
[해커랭크] Day 5: Template Literals (javascript) (0) | 2022.08.19 |