코딩익힘책 #31 수학 괄호 파싱

문제

수학공식이 제대로 입력이 되었는지 판단하는 코드를 작성하려 합니다. 괄호는 소괄호밖에 없습니다.

입출력 예시

데이터 입력(1), 프로그램 종료(2) : 1
데이터를 입력하세요: 3 + 5
True

데이터 입력(1), 프로그램 종료(2) : 1
데이터를 입력하세요: 5 + 7) * (3 * 5)
False

나의 코드

function math(e) {
  let data = e.split("");
  let count = 0;

  for (let i = 0; i < data.length; i++) {
    if (data[i] === "(") {
      count += 1;
    } else if (data[i] === ")") {
      count -= 1;
    }

    if (count) {
      return true;
    } else {
      return false;
    }
  }

  console.log(data);
}

let order = 1;

while (order) {
  // let order = prompt('데이터 입력(1), 프로그램 종료(2)');
  if (order === 1) {
    const ex = "5 + 7) * (3 * 5)";
    console.log(math(ex));
    order = 0;
  } else {
    break;
  }
}

풀이 해석

  1. 문자열을 배열로 만든다.
  2. 초기값이 0으로 초기화된 count변수를 선언한다.
  3. 배열의 값 중 "("를 만날 경우 +1 ")"를 만날 경우 -1을 한다.
  4. 0일 경우 여는 소괄호와 닫는 소괄호의 갯수가 동일하므로 true를 반환한다.
  5. 아닐 경우 false를 반환한다.

느낀 점

처음에 "연산"이 가능한지 판단하는 문제를 짜라고해서 풀지말까.. 라는 생각을 했다. 이유인즉슨 요즘 프로젝트들을 진행하고있어 여유롭게 문제를풀지 못하는 상황이다.
그렇지만 다행히 그저 소괄호가 올바른지만 확인하는 프로그램을 작성하는 것이여서 후다닥 풀었다. 새벽 3시이지만 무리없이 풀었다. 파이팅
그래 가끔은 이런 문제도 나와야지ㅎ

좋은 웹페이지 즐겨찾기