스택으로 풀라는 문제인데 스택이 더 어려워 보여서 string으로 인덱싱 하면서 풀었는데,
모든 풀이에서 스택으로 푼 풀이보고 깔끔해서 놀랐다...
접근 방법은 비슷하지만 스택으로도 풀어봐야겠다.
#include <string>
#include <vector>
using namespace std;
int solution(string arrangement) {
int answer = 0;
int stack = 0;
for(int i=0; i<arrangement.length(); i++){
if(arrangement[i]=='(' && arrangement[i+1]==')'){
answer += stack;
i++;
}
else if(arrangement[i]==')'){
answer++;
stack--;
}
else{
stack++;
}
}
return answer;
}
#include <stack> 대신 int stack을 만들어줬다..
if는 레이저, else if는 막대기의 오른쪽 끝, else는 막대기의 왼쪽 끝이다.
((( () () 까지만 보면 else를 통해 막대기 개수(stack)를 3으로 쌓고, if문에서 막대기 개수(stack)만큼 두 번 더해진다.
for문 자체에 i++가 있는데 또 하는 이유는 ( )를 같이 확인했기 때문이다.
()는 레이저라 막대기 시작과 끝 사이에는 무조건 레이저가 들어가게 된다.
)으로 닫힐 때, 막대기 하나가 남게되고 그 부분을 처리해야 한다.
( () )만 봐도 닫힐 때 처리를 하지 않으면 결괏값이 1개가 된다.
프로그래머스 Level 1 - 체육복(C++) (0) | 2019.11.24 |
---|---|
[2020카카오공채] 문자열 압축(C++) (0) | 2019.11.13 |
프로그래머스 Level 2 - 탑(C++) (0) | 2019.10.12 |
프로그래머스 Level 1 - 같은 숫자는 싫어(C++) (0) | 2019.10.07 |
프로그래머스 Level 1 - 가운데 글자 가져오기(C++) (0) | 2019.09.29 |