유블로그

[Java] BOJ 4949 균형 잡힌 세상 백준 본문

알고리즘

[Java] BOJ 4949 균형 잡힌 세상 백준

yujeong kang 2021. 5. 3. 00:24

[Java] BOJ 4949 균형 잡힌 세상 백준

 

www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class BOJ_4949_균형잡힌세상 {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		while(true) {
			String s = br.readLine();
			if(s.charAt(0) == '.') break;
			
			List<Integer> brac = new ArrayList<>();
			int bigFront = 0, smallFront = 0;
			boolean isPass = true;
			for (int i = 0; i < s.length(); i++) {
				char c = s.charAt(i);
				if(c == '[') {
					brac.add(1);
					bigFront++;
				}
				else if(c == '(') {
					brac.add(2);
					smallFront++;
				}
				else if(c == ']') {
					if(bigFront == 0 || brac.get(brac.size()-1) != 1) {
						isPass = false;
						break;
					}
					brac.remove(brac.size()-1);
					bigFront--;
				}
				else if(c == ')') {
					if(smallFront == 0 || brac.get(brac.size()-1) != 2) {
						isPass = false;
						break;
					}
					brac.remove(brac.size()-1);
					smallFront--;
				}
			}
			if(bigFront > 0 || smallFront > 0) isPass = false;
			if(isPass) System.out.println("yes");
			else System.out.println("no");
			
		} //while
	
	}
}

 

직전 괄호가 대괄호인지 소괄호인지를 구분하기 위해 arrayList 를 썼다.

Stack 으로 해도 되겠지만 그냥 List 로 했다. ㅎ

 

[ 가 나오면 list 에 넣고 [ 개수를 +1 한다.

( 가 나오면 list 에 넣고 ( 개수를 +1 한다.

 

] 가 나오면 list 마지막에 [ 가 있는지 확인한다. [ 가 아니라면 no 를 출력한다.

혹은 [ 개수가 0 이어도 no 출력한다.

 

) 가 나오면 list 마지막에 ( 가 있는지 확인한다. ( 가 아니라면 no 를 출력한다.

혹은 ( 개수가 0 이어도 no 출력한다.

 

정상적으로 짝을 찾은 ] or ) 이라면 list에서 마지막 것만 지워주고 개수도 -1 해준다.

 

다 끝나고나서 [ 혹은 ( 이 아직 남아있다면 짝을 못찾았으니 no 를 출력한다.

 

그 외의 상황은 정상적으로 모든 괄호가 짝을 찾았으니 yes 출력하면 된다.

'알고리즘' 카테고리의 다른 글

[Java] BOJ 17609 회문  (0) 2021.05.05
[Java] BOJ 9935 문자열 폭발  (0) 2021.05.04
[Java] BOJ 5430 AC 백준  (0) 2021.05.02
[Java] BOJ 1541 잃어버린 괄호  (0) 2021.04.30
[Java] BOJ 2212 센서  (0) 2021.04.28