Stack - 백준10799 쇠막대기

이형석·2024년 1월 29일

알고리즘 Phase1

목록 보기
8/59

괄호문제, 좋은 단어, 탑 문제 등을 풀어보니 이제 알고리즘에서 Stack을 어떻게 활용하는지 알 것 같다.
분명히 Stack은 과거의 기록을 기록하기 위한 것이라고 배웠는데도 지금까지 막연하게 거꾸로 data를 저장하는 객체라고 생각했었다.
지금 느끼는 것은 당연한 얘기일 수 있겠지만 가장 최근에 저장한 데이터를 계속 활용해야 하는 상황을 인지하는 것이 중요한 것 같다.

문제풀이
( -> 막대기가 쌓임
() -> 레이저로 자름 _쌓인 막대기만큼 조각이 생김
) -> 쌓인 막대기가 1개 줄어듦
위와 같은 규칙을 구현 하면 풀릴 것 같다.

import java.io.*;
import java.util.*;

public class Main{
        public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();

        Stack<Character> stack = new Stack<>();
        int sticks = 0;
        int peice = 0;

        for(int i = 0; i < str.length(); i++){
            char nowChar = str.charAt(i);

            if(stack.isEmpty()){
                sticks++;
                stack.push(nowChar);
            }else{
                char peek = stack.peek();
                if(nowChar == '('){
                    // 일단 push
                    sticks++;
                    stack.push(nowChar);

                }else if(nowChar == ')'){
                    if(peek == '('){
                        // 레이저로 자른 경우
                        sticks--;
                        peice += sticks;
                        stack.push(nowChar);

                    }else if(peek == ')'){
                        // 막대기 한개-- 인 경우
                        sticks--;
                        peice++;
                        stack.push(nowChar);
                    }
                }
            }
        }
        System.out.println(peice);
    }
}

다 풀고보니 스택이 꼭 필요한 문제는 아닌 것 같지만 문제 분류는 스택에 포함되어 있다.

profile
금융IT 개발자

0개의 댓글