프로그래머스 LV2 #4 쇠막대기

Jake Seo·2020년 7월 22일
0

프로그래머스 LV2

목록 보기
4/10

프로그래머스 LV2 #4 쇠막대기

문제

풀이

이 문제는 케이스별로 나눠서 생각해서 규칙을 만들면 쉽게 풀립니다.

케이스는 총 4개정도로 볼 수 있는데,

  1. (가 들어왔을 때
    1.1 ((가 들어왔을 때
  2. )가 들어왔을 때
    2.1 ()가 들어왔을 때
  • (가 하나만 들어왔을 때는 기본적으로 아무런 일도 일어나지 않습니다. 그러나 ((처럼 (가 연속으로 2개가 들어올 때는 길든 짧든 쇠막대가 하나 생깁니다.
  • )가 들어왔을 때는 앞에 뭐가 나왔는지가 중요한데, 앞에 (가 나온 상태에서 )가 나온다면 레이저가 발사됩니다. )가 나온상태에서 또 )가 나오는 것은 그냥 쇠막대의 끝을 의미합니다.

저는 괄호가 생성될 때 acc라는 변수를 이용해서 (가 나오면 acc = acc + 1, )가 나오면 acc = acc - 1을 해주는 방식으로 괄호를 체크했습니다.

그리고 쇠막대가 생기면 최소한 1개의 쇠막대는 있는 것이므로 answer = answer + 1과 같이 정답에 1을 더해주었고, 레이저가 쏘였을 때는 현재 쇠막대의 갯수만큼의 조각을 정답에 더해주어 쇠막대의 조각을 더해나갔습니다.

let solution = (arg) => {
    let acc = 0;
    let answer = 0;

    arg.split("").map((a, i) => {
        // "("가 들어올 때
        if(a === "("){
           acc = acc + 1;

           // "("가 2번 연속 들어오면 쇠막대가 한 개 생김
           if(arg[i-1] === "("){
              answer = answer + 1;
           }
        // ")"가 들어올 때 (쇠막대의 끝 or 레이저 발사)
        }else{
           acc = acc - 1;

            // "(" 뒤에 ")"가 들어오면 레이저 발사 -> 현재 쇠막대를 개수만큼 조각에 더함
            if(arg[i-1] === "(" && a === ")"){
               answer = answer + acc;
            }
        }
    });

    return answer;
}
profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글