백준 10799 쇠막대기

Eunkyung·2021년 10월 30일
0

Algorithm

목록 보기
5/30

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

문제해결

레이저인지 쇠막대기인지 구분하는 것이 포인트이다. 괄호가 인접해있을 경우 () 레이저, 그렇지 않을 경우 쇠막대기이다. 레이저일 경우 스택 사이즈만큼 더해주고 쇠막대기일 경우 1을 더해준다. 스택으로 구현하였는데 스택을 이용하지 않고 괄호 문제처럼 카운트해서 풀 수도 있다.

  1. 조각 개수에 대한 sum 변수 선언
  2. 열린 괄호 '(' 일 경우 스택에 추가
  3. 닫힌 괄호 ')' 일 경우
  4. 이전 값과 비교했을 때 '(' 일 경우 레이저 -> 스택 사이즈만큼 더하기
  5. 이전 값과 비교했을 때 ')' 일 경우 쇠막대기 -> 1 더하기

소스코드

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

public class b10799 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        Stack<Integer> stack = new Stack<>();
        int sum = 0; // 조각 개수
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == '(') {
                stack.push(i);
            } else { // 닫힌 괄호 )
                if (input.charAt(i-1)=='(') { // 이전 문자가 ( 일 경우 레이저
                    stack.pop();
                    sum += stack.size();
                } else { // 이전 문자가 ) 일 경우 쇠막대기
                    stack.pop();
                    sum += 1;
                }
            }
        }
        System.out.println(sum);
    }
}
profile
꾸준히 하자

0개의 댓글