프로그래머스 42585 - 쇠막대기

문제 링크

생각과 접근

  • 쇠막대기 문제는 문제의 길이는 짧지만 고민을 정말 많이 해야하는 문제였습니다.

  • 위와 같은 경우를 깊게 고민해보았습니다.
  • 괄호를 열 경우는 딱히 나뉘는 케이스가 떠오르지 않았습니다.
  • 괄호를 닫을 경우 두가지 케이스로 나뉩니다.
    • 첫 번째 : 레이저인 경우
      • 레이저일 경우, 열려있던 괄호만큼 answer를 더해주면 됩니다. (잘린 쇠 파이프 갯수!)
    • 두 번째 : 쇠막대기가 끝나는 경우
      • 쇠막대기가 끝나는 경우, 새로운 쇠막대기가 단 하나 생깁니다.

  • 빨간 원이 레이저일 때 더해주는 경우, 파란 원이 쇠막대기가 끝나는 경우입니다.

코드

#include <bits/stdc++.h>
using namespace std;

int solution(string arrangement) {
    int answer = 0;
    stack<int> s;

    for(int i = 0; arrangement[i] != '\0'; i++){
        if(arrangement[i] == '(')   s.push(1);
        else if(arrangement[i] == ')'){
            s.pop();
            if(arrangement[i - 1] == '(')       answer += s.size();
            else if(arrangement[i - 1] == ')')  answer++;
        }
    }
    return answer;
}

채점 결과

+ Recent posts