괄호문제처럼 스택을 사용한다.
여는 괄호 ' ( '가 나오면 스택에 넣고
닫는 괄호 ' ) '가 나오면 두가지 케이스로 구분해 처리한다.
- 레이저인 경우
()인 경우 레이저인데, 레이저로 잘리는 경우 스택에 넣었던 여는 괄호 하나를 제거해줘야한다.
그리고 스택에 들어있는 쇠막대기의 수를 확인하여 답에 더해준다. 레이저로 자르는 순간 그만큼 갯수가 추가되기 때문이다. - 쇠막대기의 끝부분인 경우
))인 경우 쇠막대기의 끝이다. 왜냐하면 문제에 쇠막대기에는 하나 이상의 레이저가 포함된다고 했기 때문이다.
그래서 그 경우 스택에서 pop해주고 답에 1을 더해주면 된다.
스택 자료구조를 쓰지 않고, 괄호를 세주는 변수를 사용해도 된다.
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(string arrangement) {
int answer = 0;
stack<char> s;
for(auto iter = arrangement.begin(); iter != arrangement.end(); ++iter){
if(*iter == '('){
s.push(*iter);
}else{
s.pop();
if(*(iter-1) == '('){//laser
answer += s.size();
}else{
answer++;
}
}
}
return answer;
}
'알고리즘 > 풀이' 카테고리의 다른 글
[알고리즘/프로그래머스] 올바른 괄호 C++ (0) | 2020.03.11 |
---|---|
[ALGOSPOT/알고스팟/C++]외발 뛰기 (0) | 2020.01.03 |
[프로그래머스/C++] 숫자 야구 (0) | 2019.12.30 |
[프로그래머스/C++] 가운데 글자 가져오기 (0) | 2019.11.30 |
[프로그래머스/C++] 모의고사 (0) | 2019.11.30 |