[SWEA] 1278. 괄호 짝 짓기(d4)

2924 단어 22Y02MSWEA22Y02M

문제

4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.

이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.

예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다.

아래와 같은 문자열은 유효하지 않은 문자열이다. 붉은색으로 표시된 괄호의 짝을 찾을 수 없기 때문이다.

아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다.

[입력]

각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다.

총 10개의 테스트케이스가 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음).

입력

182
(({<(({{[[[[<<[[(<[[{([{{{[<[[[{<<(<[[{}[]{}{}[]]]><><...
298
{(({[({([{(<[([(([<({[{{[[({{[({([<{(<[[((<{{[([{<<[{(<({[<(...
...

출력

#1 1
#2 0
...

코드

import java.io.*;
import java.util.*;

public class Solution_d4_1278_괄호짝짓기_대전_5반_이주희 {
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
	
		for(int i=1; i<=10; i++) {
			st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
		
			String s = new StringTokenizer(br.readLine()).nextToken();
			
1.			Stack<Character> stack = new Stack<Character>();
			//ArrayDeque<Character> stack = new ArrayDeque<>();
			
			int res=1;
			
			for(int j=0; j<N; j++) {
				char c = s.charAt(j);
				if(c=='(' || c=='[' || c=='{' || c=='<') {
					stack.push(c);
				}
				else {
					if(stack.empty()) {
						res = 0; break;
					}
					char ch = stack.pop();
					if((c==')' && ch != '(') ||
						(c==']' && ch!='[') ||
						(c=='}' && ch !='{') ||
						(c=='>' && ch != '<')) {
						res = 0; break;
					}
				}
			}
			
			if(!stack.empty()) res = 0;
			sb.append("#").append(i).append(" ").append(res).append("\n");
		}
		System.out.print(sb.toString());
		br.close();
	}
}

.java

풀이

문제 유형 : 스택

1.번라인
ArryDeque 을 쓰면 속도가 더 빨라진다.

좋은 웹페이지 즐겨찾기