알고리즘/백준
공부 84일차: 백준 10799번 쇠막대기 자바 Java
김발자~
2022. 10. 22. 23:23
반응형
10799 쇠막대기
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
백준 10799번 문제 쇠막대기
문제

과정 생각해보기

그림에서 표시한 것처럼
1. (로 쇠막대가 시작될 때마다 스택에 추가해주고
2. 레이저를 쏘면 스택 사이즈만큼 더하고
3. )으로 쇠막대가 끝날 때마다 +1을 해주면 된다
정답 인정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> st = new Stack();
String str = br.readLine();
int sum = 0;
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) == '(') { //열리는 괄호 ( 라면
st.push('('); //스택에 쇠막대기 추가
}else { // 닫히는 괄호 ) 라면
if(str.charAt(i-1) == '(') { //이전이 '('라면 = 레이저라면
st.pop(); //레이저몫 ( 하나 빼고
sum += st.size(); //레이저라면 지금까지 스택 크기만큼 더한다
}else { //쇠막대가 끝난 거라면
st.pop(); //쇠막대 개수 1개 줄이고
sum += 1; //1을 더한다
}
}
}
System.out.println(sum);
}
}
|
cs |
위에서 설명한 대로, 주석에 적은 대로 짠 정답
(BufferedWriter로 sum 출력했더니 이클립스에서 계속 □으로 출력하길래 프린트로 바꿨다)
반응형