[백준(Baekjoon)][자바(java)] 10799 : 쇠막대기 / 스택

728x90

 

www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

 

문제 풀이

 

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) );
		br.close();
        
		String s = br.readLine().replace("()", "*");
		int stick = 0;
		Stack<Character> stack = new Stack<>();
		for( int i = 0; i < s.length(); i++ ) {
			if( s.charAt(i) == '(' )
				stack.push('(');
			else if( s.charAt(i) == ')' ) {
				if( !stack.isEmpty() ) stack.pop();
				stick++;
			}
			else if( s.charAt(i) == '*' ) 
				stick += stack.size();
		}
        
		System.out.println( stick );

	}
}

 

*  스택

-  스택에는 '(' 괄호( char 타입 )를 넣는다
-  "( )" 가 레이저 --> 괄호 대신 임의의 다른 기호로 변환 ( ex) '*' )
-  문자열을 입력받고 순차적으로 문자를 탐색
   '(' 일 경우 : 스택에 '('를 넣음
   ')' 일 경우 : 스택의 '('를 pop하고 막대기의 개수를 1 더함
   '*' 일 경우 : 스택의 괄호 개수( stack.size() )를 막대기의 개수에 더함

 

 

반응형