본문 바로가기
짱구 굴리기 (Q) -

[프로그래머스] 쇠막대기 (스택/큐)

by skwzz 2019. 1. 9.

출처 : https://programmers.co.kr/learn/courses/30/lessons/42585








스택을 사용하여 해결함~

첨엔 잘 몰라서 손으로 그려가면서 어떻게 돌아가는지 찾아보았음

일반적인 괄호문제와 비슷하게 돌아가면서 - [ ( : push, ) : pop 을 시켜줌 ] 


1. pop을 할 시 이 부분이 레이저인지, 아닌지를 판별해줘야 함 . 

  이 부분은 반복문을 돌면서 이전에 들어온 문자를 저장하여 사용.
  조건에 여는 괄호와 닫는 괄호는 항상 쌍을 이룬다 나왔기 때문에 별 다른 상황 생각을 안함  

2. 레이저일 경우 : pop을 하고 현재 스택의 사이즈만큼 더해줌 

3. 레이저가 아닐경우 : 이 부분은 막대기가 없어졌단 소리로 pop을 해주고 1을 더해줌 (막대기 꼬랑지부분을 

   처리해야 하기 때문엥)



소스코드

public static int calcBar(char[] arr) {
		Stack s = 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