반응형
https://www.acmicpc.net/problem/10799
[풀이과정]
막대기를 자르는 레이저의 개수 + 1만큼 막대기가 증식함.
1) '(' 일 때
stack에 넣어줌
2) ')' 일 때 -> 두 가지 경우로 나뉨
먼저 pop해서 '('를 제거
2-1) 레이저의 끝일 때
stack에 있는 막대기 모두를 자르기 때문에 +stack.size를 해줌
2-2) 막대기의 끝일 때
+1 해주기
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
/*
쇠막대기를 겹침.
자신보다 긴 막대기 위에만 놓일 수 있음.
레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않음
'()' : 레이저
'(',')' : 막대기의 양 끝
*/
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static String env;
static Stack<Character> stack;
static Stack<Integer> laser;
public static void main(String[] args) throws IOException {
init();
System.out.print(devide());
}
static void init() throws IOException{
env = br.readLine();
stack = new Stack<>();
laser = new Stack<>();
}
static int devide(){
int result = 0;
for(int i = 0; i < env.length(); i++){
char now = env.charAt(i);
if(now == '('){
stack.push(now);
}
else if(now == ')'){
stack.pop();
//레이저 끝일 때
if(env.charAt(i - 1) == '('){
result += stack.size();
}
//막대기 끝일 때
else {
result++;
}
}
}
return result;
}
}
반응형
'알고리즘 > 스텍' 카테고리의 다른 글
[백준] 30470 : 호반우가 학교에 지각한 이유 3 (JAVA) (0) | 2025.04.02 |
---|---|
[백준] 6198 : 옥상 정원 꾸미기 (JAVA) (0) | 2024.11.01 |
[백준] 17680 : 막대기 (0) | 2023.03.29 |
[백준] 1874 : 스택수열 (1) | 2023.03.24 |
[백준] 1725 : 히스토그램 (0) | 2023.03.24 |