[알고리즘] Stack, Queue (5) : 쇠막대기 (JAVA)

ho's·2022년 6월 8일
0

🍈 쇠막대기

🥙문제

🥙풀이

🍍어떻게 문제를 풀 것인가?

  1. ( 가 들어오면 Stack에 저장해라!

  2. ) 가 입력되었을때 ) 바로 앞에 ( 가 있다면, 그것은 레이저이다.

  3. stack에 쌓여있는 것 만큼 answer에 더 해준다.

  4. ) 앞에 (가 없다면 막대기가 없어지는 것 이므로, stack에 쌓여있는 (를 하나 pop시키고, answer+1 을 해준다.

🍍 평가

  • 문제의 길이, 양을 보고 잘 읽지도 않고 어렵다고 판단했다.
  • Stack을 이용하는 것은 알았으나, 막대와 레이저를 어떻게 구별해야할지 잘 몰랐었다.
  • 어려워보이는 문제도 추상화를 거치면 간단한 문제로 바뀐다는 것을 알았다.

🥙소스코드

package algolecture;

import java.util.Scanner;
import java.util.Stack;

public class Main40 {
    public int solution(String str){

        int answer = 0;

        Stack<Character> stack = new Stack<>();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='('){
                stack.push('(');
            }else{
                stack.pop();
                if(str.charAt(i-1) == '('){
                    answer += stack.size();
                }else
                    answer++;
            }
        }
        return answer;
    }
    
    public static void main(String[] args) {
        Main40 T = new Main40();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.print(T.solution(str));
    }
}
profile
그래야만 한다

0개의 댓글