본문 바로가기

HackerRank

[해커랭크] Day 9: Binary Calculator (javascript)

이진수 계산기 만들기 
- 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 에러같으나.. 원인은 모르겠음

결과 테스트 이미지 생성하다 에러발생하는 것으로 추정