Jun 개발노트

프로그래머스 - 쇠막대기_스택

February 17, 2020

쇠막대기

  1. 이해

    • 레이저에 의해서 쪼개지는 막대기 수 구하기
  2. 계획

    • 레이저를 찾아서 () => 0 으로 바꾸기
    • 자료구조 ‘Stack’을 이용하여 ’(’ 오면 +1 ’)‘가 오면 -1 이용하여 막대기 수 구하기
  3. 실행

    const getRazer = razers => {
        return razers.replace(/\(\)/g, 0)
    }
    
    const sliceStick = sticks => {
    const stickArr = [...sticks];
    let count = 0;
    let stick = 0;
    for(let i = 0, len = stickArr.length; i < len; i++){
        let target = stickArr.shift()
        if(target === '('){
                stick++;
        }else if(target === ')'){
            stick—;
            count++;
        }else if(target === '0'){
            count += stick
        }
    }
    return count
    }
    
    describe('쇠막대기 구하기', () => {
        test('최종 ', () => {
            expect(sliceStick(getRazer("()(((()())(())()))(())"))).toEqual(17);
        });
        test('레어져 찾기 ', () => {
            expect(getRazer("()(((()())(())()))(())")).toEqual('0(((00)(0)0))(0)');
        });
        test('짜르기', () => {
            expect(sliceStick('0(((00)(0)0))(0)')).toEqual(17);
        })
    });
  4. 반성

    • 정규표현식에 대한 이해가 필요(원하는 문자열을 바로 찾을 수 있게)
    • 반복문에서 제한조건인 배열의 length를 사용하면 계속해서 불러오기 때문에 초기식에서 length를 변수에 담는다

      for(let i = 0; i < Array.length; i++>)
      // Array.length를 계속해서 호출하기 때문에 Array가 변하면 제한조건이 변함
      for(let i = 0, len = Array.length; i < len; i++>)
      // length를 len이라는 변수에 담아서 한번만 호출해서 효율적이게 만들어준다.

Written by Junho You 배운것을 기록하자