BOJ 10799. 쇠막대기

less than 1 minute read

BOJ 10799. 쇠막대기

image image

풀이

image 레이저는 인접한 괄호쌍()로 표현한다.
쇠막대기의 왼쪽 끝은 여는 괄호(, 오른쪽 끝은 닫는괄호)로 표현한다.

  • 여는 괄호(를 만났을 때는 Stack에 넣어준다.
  • 닫는 괄호 )를 만났을때
    • Stack.peak()가 여는괄호(일 경우 Stack.pop() 한 후 남은 Stack의 size가 잘린 쇠막대기의 개수가 된다.
    • Stack.peak()가 닫는괄호)일 경우 Stack.pop() 한 후 쇠막대기의 개수를 +1 한다
      • 이때 쇠막대기의 마지막 이므로 이미 왼쪽에 생긴 쇠막대기는 모두 세었으니, 세지 못한 1개만 더한다

((()()))인 경우

image image image image

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        Stack<Character> stack = new Stack<>();
        int t = 0;

        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c == '(') {
                stack.push(c);
            } else {
                stack.pop();
                if (input.charAt(i - 1) == '(') {
                    t += stack.size();
                } else {
                    t++;
                }
            }
        }

        System.out.print(t);
    }
}
import java.util.*

fun main() {
    val input = readLine()!!
    val stack = Stack<Char>()
    var t = 0
    var before = ' '
    input.forEach { c ->
        if (c == '(') stack.push(c)
        else {
            stack.pop()
            t += if (before == '(') stack.size else 1
        }
        before = c
    }
    println(t)
}

풀이소스

github.com/beomjo/algorithm-study/blob/main/BOJ/java/10799.java github.com/beomjo/algorithm-study/blob/main/BOJ/kotlin/10799.kt