상세 컨텐츠

본문 제목

프로그래머스 Level 2 - 쇠막대기(C++)

학생일기/알고리즘

by jaws99 2019. 10. 12. 23:53

본문

반응형

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

스택으로 풀라는 문제인데 스택이 더 어려워 보여서 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을 만들어줬다..

 

1. if, else if, else

if는 레이저, else if는 막대기의 오른쪽 끝, else는 막대기의 왼쪽 끝이다.

((( () () 까지만 보면 else를 통해 막대기 개수(stack)를 3으로 쌓고, if문에서 막대기 개수(stack)만큼 두 번 더해진다.

 

2. if -> i++?

for문 자체에 i++가 있는데 또 하는 이유는 ( )를 같이 확인했기 때문이다.

 

3. else if -> answer++?

()는 레이저라 막대기 시작과 끝 사이에는 무조건 레이저가 들어가게 된다.

)으로 닫힐 때, 막대기 하나가 남게되고 그 부분을 처리해야 한다.

( () )만 봐도 닫힐 때 처리를 하지 않으면 결괏값이 1개가 된다.

반응형

관련글 더보기