본문 바로가기
Study/99클럽 코테 스터디

[99클럽 코테 스터디 7일차 TIL] 쇠막대기

by hxxyeoniii 2025. 4. 8.

 

7일차 문제

링크 : https://www.acmicpc.net/problem/10799

 

 

 

문제 풀이

스택을 사용하여 풀이하였다.

 

1. '('은 stack에 넣어준다.

2. ')'은 레이저를 나타낼 수도, 막대기의 끝 부분을 나타낼 수도 있다.

   -> 레이저일 경우, 잘린 막대의 수(stack의 사이즈)를 더해주고

   -> 막대기의 끝 부분일 경우 +1을 더해준다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {

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

        String str = st.nextToken();
        int answer = 0;
        Stack<Character> stack = new Stack<>();

        for(int i=0; i<str.length(); i++) {
            Character c = str.charAt(i);

            if(c == '(') {
                stack.push(c);
            } else {
                if(!stack.isEmpty()) {
                    if(str.charAt(i-1) == '(') {
                        stack.pop();
                        answer += stack.size();
                    } else {
                        stack.pop();
                        answer++;
                    }
                }
            }
        }
        System.out.println(answer);
    }
}