알고리즘/백준

[백준 - 4889] 실버1 - 안정적인 문자열(그리디)

www.acmicpc.net/problem/4889

 

4889번: 안정적인 문자열

입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우�

www.acmicpc.net

1. 유형

그리디

 

2. 풀이

스택을 이용한 그리디 문제이다.

 

'{'이 나오면 바로 push를 한다.

 

'}' 이 나올때마다 스택이 비어있지 않으면 pop을 해주고 비어있으면 push를 해준다. 

 

맨 처음에 '}' 이 나오면 '{'으로 바꿔주는 것이 핵심이다.

 

3. 코드

package 문자열;

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

public class back_4889안정적인_문자열 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int idx=1;
		while (true) {
			Stack<Character> s = new Stack<>();
			String str = sc.nextLine();
			int total=0;
			if(str.charAt(0)=='-') break;
			for (int i = 0; i < str.length(); i++) {
				if(str.charAt(i)=='{') {
					s.add('{');
				}else {
					if(!s.empty()) {
						s.pop();
					}else {
						total++;
						s.add('{');
					}
				}
			}
			total+=(s.size()/2);
			System.out.println(idx+". "+total);
			idx++;
		}
	}
}