프로그래머스 - 쇠막대기_스택
February 17, 2020
쇠막대기
-
이해
- 레이저에 의해서 쪼개지는 막대기 수 구하기
-
계획
- 레이저를 찾아서 () => 0 으로 바꾸기
- 자료구조 ‘Stack’을 이용하여 ’(’ 오면 +1 ’)‘가 오면 -1 이용하여 막대기 수 구하기
-
실행
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); }) });
-
반성
- 정규표현식에 대한 이해가 필요(원하는 문자열을 바로 찾을 수 있게)
-
반복문에서 제한조건인 배열의 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이라는 변수에 담아서 한번만 호출해서 효율적이게 만들어준다.