문제
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
사용한 알고리즘
Stack
풀이
괄호에서 레이저를 파악하는 것이 핵심인 문제였다.
Stack을 통해 '('을 삽입을 하면서 '()'이 있는 경우는 레이저로 판단하여, 조건 문으로 분기를하여 풀이를 하였다.
자세한 것은 풀이를 확인해보자.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Test_Stack {
static StringBuffer sb;
static int ans = 0;
public static void main(String[] args) {
//입력
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuffer();
try {
sb.append(bf.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
go();
}
static void go(){
Stack<Character> stack = new Stack<>();
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == '(') {
stack.add(sb.charAt(i));
} else if (sb.charAt(i) == ')') {
//레이저가 있는경우 "()"
if (i >= 1 && sb.charAt(i - 1) == '(') {
stack.pop();
ans += stack.size(); //현재 stack의 사이즈만 큼 더해준다/
} else { //그 전 괄호가 닫힌 괄호면 레이저가 아님
ans++; //단순히 1을 더해줌
stack.pop();
}
}
}
System.out.println(ans);
}
}
Stack 사용법
https://coding-factory.tistory.com/601
[Java] 자바 Stack 클래스 사용법 & 예제 총정리
Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것
coding-factory.tistory.com
'Algorithm (PS) > 백준' 카테고리의 다른 글
[백준] 10816. 숫자 카드2 (Java) [lower_bound, upper_bound] (0) | 2023.07.08 |
---|---|
[백준] 2805. 수들의합 (Java) [이분탐색] (0) | 2023.07.08 |
[백준] 1789. 수들의합 (Java) [이분탐색] (0) | 2023.07.08 |
[백준] 2346. 풍선 터트리기 (Java) [Deque] (0) | 2023.07.06 |
[백준] 1966. 프린터 큐 (Java) [Queue + PrioirtyQueue] (0) | 2023.07.05 |