μ•Œκ³ λ¦¬μ¦˜/기좜 및 λ°±μ€€ 풀이

[ν•œκ΅­μ •λ³΄μ˜¬λ¦Όν”Όμ•„λ“œ]μ‡ λ§‰λŒ€κΈ°

choi95 2021. 7. 14. 16:00

문제

λ¬Έμ œν’€μ΄


  • μ—¬λŠ” κ΄„ν˜ΈμΌ 경우 μŠ€νƒμ— 계속 μ €μž₯
  • λ‹«λŠ” κ΄„ν˜ΈμΌ κ²½μš°μ—λŠ” μ•žμ— 인덱슀 μš”μ†Œμ— 따라 λ‹€λ₯Έ μ—°μ‚° μ‹œν–‰
  • μ•žμ— 인덱슀 μš”μ†Œκ°€ μ—¬λŠ” κ΄„ν˜ΈμΌ 경우(λ ˆμ΄μ €)λŠ” λ ˆμ΄μ € ν•œμŒμ— ν•΄λ‹Ήν•˜λŠ” μ—¬λŠ” κ΄„ν˜Έλ₯Ό μŠ€νƒμ—μ„œ μ‚­μ œ
  • (μ‚­μ œ 된 μŠ€νƒμ˜ 크기) === (μ ˆλ‹¨ 된 μ‡ λ§‰λŒ€κΈ° 쑰각)
  • μ•žμ— 인덱슀 μš”μ†Œκ°€ λ‹«λŠ” κ΄„ν˜ΈμΌ 경우(μ‡ λ§‰λŒ€κΈ° 끝단)λŠ” μ‡ λ§‰λŒ€κΈ° 쀑 κ°€μž₯ μž‘μ€ λ§‰λŒ€κΈ°μ˜ μ‹œμž‘λ‹¨μ„ μŠ€νƒμ—μ„œ μ‚­μ œ
  • μ‚­μ œ 된 λ§‰λŒ€κΈ° 끝단에 쑰각 ν•˜λ‚˜κ°€ 남아 있음

μ½”λ“œ

function solution(p) {
  let answer = 0;
  let stack = [];

  for (let i = 0; i < p.length; i++) {
    if (p[i] === ")") {
      if (p[i - 1] === "(") { // λ ˆμ΄μ €μΌ 경우
        stack.pop(p[i - 1]);
        answer += stack.length;
      } else { //μ‡ λ§‰λŒ€κΈ°μΌ 경우
        stack.pop();
        answer += 1; //μ‡ λ§‰λŒ€κΈ°μ˜ 남은 쑰각(끝단)을 κ°€μ‚°
      }
    } else stack.push(p[i]);
  }

  return answer;
}

let pos = "()(((()())(())()))(())";
console.log(solution(pos));

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;
            }
            
            let a="()(((()())(())()))(())";
            console.log(solution(a));