출처 : https://programmers.co.kr/learn/courses/30/lessons/42585
스택을 사용하여 해결함~
첨엔 잘 몰라서 손으로 그려가면서 어떻게 돌아가는지 찾아보았음
일반적인 괄호문제와 비슷하게 돌아가면서 - [ ( : push, ) : pop 을 시켜줌 ]
1. pop을 할 시 이 부분이 레이저인지, 아닌지를 판별해줘야 함 .
이 부분은 반복문을 돌면서 이전에 들어온 문자를 저장하여 사용.
조건에 여는 괄호와 닫는 괄호는 항상 쌍을 이룬다 나왔기 때문에 별 다른 상황 생각을 안함
2. 레이저일 경우 : pop을 하고 현재 스택의 사이즈만큼 더해줌
3. 레이저가 아닐경우 : 이 부분은 막대기가 없어졌단 소리로 pop을 해주고 1을 더해줌 (막대기 꼬랑지부분을
처리해야 하기 때문엥)
소스코드
public static int calcBar(char[] arr) { Stacks = new Stack (); char before = ' '; int returnV = 0; int arrLen = arr.length; for(int i=0; i<arrLen; i++) { if(arr[i]=='(') { s.push(arr[i]); }else { if(before=='(') { // is Laser s.pop(); returnV += s.size(); }else { // is not Laser s.pop(); returnV++; } } before = arr[i]; } return returnV; }
이거 밑에 캐릭터 태그 열고닫는건 신택스하이라이터랑 스택 충돌이 났는데 어캐 해야대는지 모르겟음
'짱구 굴리기 (Q) - ' 카테고리의 다른 글
[백준 2920] 음계 (0) | 2019.01.18 |
---|---|
[백준 2908] 상수 (0) | 2019.01.18 |
[백준 4963] 섬의 개수 (0) | 2019.01.16 |
[백준1260] DFS와 BFS (0) | 2019.01.11 |
[백준 2750] 수 정렬하기 (0) | 2018.12.13 |