알고리즘/자료구조
[BOJ10799] 쇠막대기 (스택, 자료구조)
leejinwoo1126
2023. 9. 13. 20:29
반응형
문제 링크
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
문제 풀이
- 스택 자료 구조 응용 문제
- 시간 복잡도 : O(N)
절차
1) 스택 선언하고 "(" 인 경우 스택에 추가한다.
2) ")"는 괄호일 때
2-1) 이전 괄호가 "(" 인 경우 레이저가 되므로, pop() 후 stack.size() 를 결과에 합산한다.
2-2) 레이저가 아닌 경우(=쇠막대 하나가 끝나는 위치) pop() 후 +1 을 결과에 합산한다.
예제입력 2
(((()(()()))(())()))(()())
예제출력 2
24
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static String input;
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
input = br.readLine(); // 입력
Stack<String> stack = new Stack();
String[] parentheses = input.split("");
int result = 0;
String prev = "";
for(String p : parentheses) {
if("(".equals(p)) {
stack.push(p);
prev = p;
} else {
stack.pop();
if("(".equals(prev)) result += stack.size(); // 레이저인 경우
else result += 1; // 쇠막대 하나가 끝나는 위치인 경우
prev = p;
}
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(result + "");
bw.flush();
bw.close();
}
public static void main(String[] args) throws Exception {
input();
}
}
반응형