[21/07/30-31 KATA NINJA] 스택

NinjaJuunzzi·2021년 7월 29일
0

코드카타

목록 보기
6/36
post-thumbnail

올바른 괄호

let stack = [];
  let answer = "YES";

  for (c of s) {
    if (c === "(") stack.push(c);
    else {
      if (stack.length === 0) {
        return "NO";
      }
      stack.pop();
    }
  }
  return stack.length > 0 || answer === "NO" ? "NO" : "YES";

괄호 문자 제거

  let stack = [];
  for (let i = 0; i < s.length; i++) {
    const c = s[i];
    if (c === ")") {

      while(stack.pop() !== '(') // 인라인으로 해버리자
            
    } else {
      stack.push(c);
    }
  }
  return stack.join("");

크레인 인형뽑기

  let answer = 0;
  let stack = [];
  moves.forEach((m) => {
    m = m - 1;
    for (let row = 0; row < 5; row++) {
      const kind = board[row][m];

      if (kind !== 0) {
        const pop = stack.pop();
        if (kind === pop) {
          answer += 2;
        } else {
          stack.push(pop);
          stack.push(kind);
        }
        board[row][m] = 0;
        break;
      }
    }
  });
  return answer;

후위식 연산

function compute(s, f, operator) {
  switch (operator) {
    case "+":
      return +f + +s;
    case "*":
      return +f * +s;
    case "-":
      return +f - +s;
  }
}
(...)
  let stack = [];
  for (let c of s) {
    // pop의 순서가 중요하다. 처음 pop => 두번째 피연산자
    // 다음 pop => 첫번째 피연산자
    if (isNaN(+c)) stack.push(compute(stack.pop(), stack.pop(), c));
    else stack.push(c);
  }
  return stack.pop();

쇠막대기

  let answer = 0;
  let stack = [];

  s.split("").forEach((c, index) => {
    if (c === "(") {
      stack.push(c);
    } else {
      stack.pop();
      if (s[index - 1] === "(") {
        answer += stack.length;
      } else {
        answer += 1;
      }
    }
  });
  return answer;
profile
Frontend Ninja

0개의 댓글