❗❗ 쇠막대기 : Stack

frenchkebab·2021년 8월 25일
0
post-thumbnail


내 풀이

function solution(s) {
  let answer = 0;
  let stack = [];
  let prev;
  for (let x of a) {
    if (x === '(') stack.push(x);
    else {
      if (prev === '(') {
        stack.pop();
        answer += stack.length;
      } else {
        stack.pop();
        answer += 1;
      }
    }
    prev = x;
  }
  return answer;
}

let a = '(((()(()()))(())()))(()())';
console.log(solution(a));

옛날에 이 문제를 C++로 풀면서 너무 어려워서 좌절했었는데...
별 어려움 없이 쑥 풀려서 울뻔했다 ㅠㅠ


내 풀이 수정

function solution(s) {
  let answer = 0;
  let stack = [];
  let prev;
  for (let x of a) {
    if (x === '(') stack.push(x);
    else {
      stack.pop()
      if (prev === '(') answer += stack.length;
      else answer += 1;
    }
    prev = x;
  }
  return answer;
}

중복되는 부분 refactoring을 해 주었다.


Solution 풀이

function solution(s) {
  let answer = 0;
  let stack = [];
  for (let i = 0; i < s.length; i++) {
    if (s[i] === '(') stack.push('(');
    else {
      stack.pop();
      if (s[i - 1] === '(') answer += stack.length;
      else answer++;
      //stack.pop(); 이 위치에 하면 레이저까지 카운팅한다.
    }
  }
  return answer;
}

그냥 prev 변수 대신에 i-1을 해준 것 말고는 동일하다.
문제를 잘푼 것 같아서 뿌듯하다 !!!

profile
Blockchain Dev Journey

0개의 댓글