백준 - 균형잡힌 세상 [4949]

노력하는 배짱이·2021년 1월 6일
0

백준 알고리즘

목록 보기
3/35
post-thumbnail

문제

(요약)

  • 문자열에 포함되는 소괄호 '()' 혹은 대괄호 '[]' 가 균형을 이루는지 구하기

입력

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

입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.

출력

각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.

풀이

문자열 한줄씩 입력을 받아 char형 배열에 넣고 소괄호 혹은 대괄호가 나올때마다 비교를 해주면 된다.

여는 괄호가 나왔을 경우 스택에 넣어주고 닫는 괄호가 나왔을 경우 스택에서 하나 꺼내서 짝이 맞는지 비교하면 된다.

소스

public class Main {

	public static Stack<Character> s = new Stack<Character>();

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		while (true) {
			String str = sc.nextLine();
			if (str.equals("."))
				break;

			char[] c = str.toCharArray();

			if (check(c)) {
				System.out.println("yes");
			} else
				System.out.println("no");

			s.clear();

		}

	}

	public static boolean check(char[] c) {
		boolean result = false;

		for (int i = 0; i < c.length; i++) {
			switch (c[i]) {
			case '(':
			case '[':
				s.add(c[i]);
				break;
			case ')':
				if (!s.isEmpty() && s.peek() == '(')
					s.pop();
				else
					return false;

				break;
			case ']':
				if (!s.isEmpty() && s.peek() == '[')
					s.pop();
				else
					return false;

				break;

			}
		}

		if (s.isEmpty()) {
			result = true;
		} else
			result = false;

		return result;
	}

}

0개의 댓글