반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

쇠막대기 본문

반응형

해결법

이 문제는 스택으로 해결할 수 있다. 만약 괄호가 "("이면 스택에 넣는다. 그러다가 ")"를 만나면 2가지 케이스로 나뉜다. 우선 무조건 스택에 있는 "(" 1개를 삭제한다. 그리고 앞이 "("이면 레이저라서 스택에 있는 "(" 개수만큼 answer에 더해준다. 앞이 ")"이면 막대가 끝난거라서 잘리고 남아있는 막대 1개를 answer에 더해준다.

코드

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = 0;

        let ary = [];

        for (let i = 0; i < s.length; i++) {
          if (s[i] === "(") {
            ary.push(s[i]);
          } else if (s[i] === ")" && s[i - 1] === "(") {
            ary.pop();
            answer += ary.length;
          } else {
            ary.pop();
            answer += 1;
          }
        }

        return answer;
      }

      let a = "()(((()())(())()))(())";
      console.log(solution(a));
    </script>
  </body>
</html>
반응형
Comments