백준

이런저런 문제들 #10799: 쇠막대기

chaechaepower 2022. 9. 28. 13:44

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

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

www.acmicpc.net

 

 


 

메모

 

쇠막대기와 레이저의 구분을 어떻게 해야할지(스택 안에 쌓인 괄호로는 구분 못함. 한번에 괄호 input 전체를 받은 다음에 거기서 구분해야.), 전체 총 조각의 개수를 어떻게 세야할 지 마땅한 아이디어가 안떠올라서 헤맸다. 풀이를 보면 쉬운데 내 생각은 왜 거기까지 닿지 않으까..

 

 

 

 

 

 

코드

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Main {
	

	public static void main(String[] args) throws IOException {
		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String input=br.readLine();
		
		int cnt=0;
		Deque<String> stack=new ArrayDeque<>(); 
		
		for(int i=0;i<input.length();i++){
			char par=input.charAt(i);
			
			if(par=='('){
				stack.offerFirst("(");
			}
			else { //par==')'
				if(input.charAt(i-1)=='(') { //레이저
					stack.pollFirst();
					cnt+=stack.size();
				}
				else { //막대 끝
					stack.pollFirst();
					cnt++;
				}
			}
		}
		
		System.out.println(cnt);
	
	}
	
}

 

https://steady-coding.tistory.com/10

이분꺼 참고

 

 

참고로 스택 없이도 구현 가능