더 많이 실패하기

공부 84일차: 백준 10799번 쇠막대기 자바 Java 본문

알고리즘/백준

공부 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 출력했더니 이클립스에서 계속 □으로 출력하길래 프린트로 바꿨다)

 

 

 


 

반응형
Comments