티스토리 뷰

알고리즘 문제 풀이

괄호 / 스택

딩신 2018. 10. 1. 13:03

괄호

 

문제


괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나태내야 한다.

 

입력


첫째 줄에 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.  

출력


만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.

 

예제 입력

(())())

예제 출력

NO

 

출처

2012 ACM ICPC Asia Daejeon Regional 인터넷 예선 G


코드

//괄호 스택

import java.util.*;

public class Main {

public static ArrayList<Integer> box = new ArrayList<>();

//첫째 줄에 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
String a;
int b;
int c;
int d = 0;
Stack<String> stack = new Stack<>();

a = sc.nextLine();
sc.close();

String[] charBox = a.split("");

boolean isGood = true;
for (int i = 0; i < charBox.length; i++) {
if (charBox[i].equals("(")) stack.push(charBox[i]);
else if (charBox[i].equals(")")) {
if (stack.isEmpty()) {
isGood = false;
break;
} else stack.pop();
}
}

if (isGood && stack.isEmpty()) System.out.println("YES");
else System.out.println("NO");

}


}


'알고리즘 문제 풀이 ' 카테고리의 다른 글

달팽이는 올라가고 싶다  (0) 2018.10.01
  (0) 2018.10.01
괄호의값  (0) 2018.10.01
Merge sort  (0) 2018.10.01
원형큐 구현하기  (0) 2018.10.01
선형큐 구현하기  (0) 2018.10.01
스택구현하기  (0) 2018.10.01
숫자박스 - 90점  (0) 2018.10.01
댓글