728x90

문제

알파벳과 소괄호, 대괄호로만 이루어진 문자열이 주어졌을 때

괄호가 알맞게 짝을 이루는지 여부를 출력하라

 

접근 방식

스택을 사용해서 풀 수 있는 대표적인 문제로

여는 괄호만 항상 스택에 넣어주고

닫는 괄호를 만났을 때 스택의 최상위와 비교하여

짝이 맞는지 확인하면 된다.

 

중간에 하나라도 짝이 맞지 않는 경우에는 반복문을 종료하고

"no"를 출력해주면 된다.

 

풀이

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		while (true) {
			String input = br.readLine();

			if (input.equals(".")) {
				break;
			}

			Stack<Character> stack =new Stack<>();

			for (int i = 0; i < input.length(); i++) {
				char c = input.charAt(i);

				if (c == '(' || c == '[') {
					stack.push(c);
				} else if (c == ')') {
					if (stack.isEmpty() || stack.peek() == '[') {
						sb.append("no").append("\n");
						break;
					}
					stack.pop();
				} else if (c == ']') {
					if (stack.isEmpty() || stack.peek() == '(') {
						sb.append("no").append("\n");
						break;
					}
					stack.pop();
				} else if (c == '.') {
					if (!stack.isEmpty()) {
						sb.append("no").append("\n");
						break;
					}
					sb.append("yes").append("\n");
				}
			}
		}

		System.out.println(sb);
	}
}

 

'Java > Algorithms' 카테고리의 다른 글

[백준] 10799번 : 쇠막대기  (0) 2023.10.07
[백준] 3986번 : 좋은 단어  (0) 2023.10.07
[백준] 5430번 : AC  (1) 2023.10.04
[백준] 1021번 : 회전하는 큐  (0) 2023.10.04
[백준] 10866번 : 덱  (2) 2023.10.03

+ Recent posts