쇠막대기 절단 문제 (Stack)

 

 

import java.util.Scanner;
import java.util.Stack;

public class Main {

	public int solution(String str) {
		int ans = 0;
		
		Stack<Character> stk = new Stack<>();
		for(int i = 0; i < str.length(); i++) {
			char temp = str.charAt(i);
			
			if(temp == ')'){
				if(str.charAt(i-1) == '(') {
					stk.pop();
					ans += stk.size();
				}
				else if(str.charAt(i-1) == ')') {
					ans++;
					stk.pop();
				}
			}
			else if(temp == '(') stk.push(temp);

		}
		return ans;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main T = new Main();
		Scanner kb = new Scanner(System.in);

		String str = kb.next();
		System.out.println(T.solution(str));
	}

}

 

  • ( → 막대기 추가
    • push
  • ( ) → 절단
    • answer += 현재 막대 개수
  • ) ) → 막대기 끝
    • answer +=1

 

 

 

출처 : 한국정보올림피아드

'Solved > 코딩테스트' 카테고리의 다른 글

토마토(BFS 활용)  (0) 2023.03.29
후위연산식 문제 (Stack)  (0) 2023.03.18
임시반장 정하기 문제  (0) 2023.03.17
Least Recently Used  (0) 2023.03.14
크레인 인형뽑기 (Stack)  (0) 2023.03.11