[SWEA] 1278. 괄호 짝 짓기(d4)
문제
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();
}
}
풀이
문제 유형 : 스택
1.번라인
ArryDeque 을 쓰면 속도가 더 빨라진다.
Author And Source
이 문제에 관하여([SWEA] 1278. 괄호 짝 짓기(d4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@erin_lee/SWEA-1278.-괄호-짝-짓기d4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)