Collection 프레임워크의 List를 이용해서 스택을 구현해 풀었다 !
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
String str = br.readLine(); //문자열을 입력받음
if(str.charAt(0)=='.')
break;
for(int i=0;i<str.length();i++) {
if(str.charAt(i) =='[' || str.charAt(i)=='(') { //문자요소가 괄호가 아니면 stack에 넣기
stack.add(str.charAt(i));
}
else if(str.charAt(i) ==']' || str.charAt(i)==')'){//요소가 닫힌 괄호이면
if(str.charAt(i) == ']')
largec = false;
else if(str.charAt(i)==')')
smallc = false;
//스택의 맨 위 요소를 가져와서 열린 괄호면
if(stack.size() != 0) {
if(stack.get(stack.size()-1) == '(' || stack.get(stack.size()-1) == '[') {
if(stack.get(stack.size()-1) == '[') {
largec = true;
stack.remove(stack.size()-1);
}
else if(stack.get(stack.size()-1)=='(') {
smallc = true;
stack.remove(stack.size()-1);
}
}
}
}
}
if(smallc == true && largec==true)
System.out.println("yes");
else
System.out.println("no");
}
}
}
엥 근데 틀렸대 ㅠ 모지
아 스택의 맨 위에 짝맞는 요소가 없을 수도 있는 거를 고려 안 했다 !
예를 들면 [ ( [ ) ] ] 이거는 no
수정했는데
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
String str = br.readLine(); //문자열을 입력받음
if(str.charAt(0)=='.')
break;
for(int i=0;i<str.length();i++) {
if(str.charAt(i) =='[' || str.charAt(i)=='(') { //문자요소가 괄호가 아니면 stack에 넣기
stack.add(str.charAt(i));
System.out.println(str.charAt(i));
}
else if(str.charAt(i) ==']' || str.charAt(i)==')'){//요소가 닫힌 괄호이면
System.out.println("지금문자"+str.charAt(i));
if(str.charAt(i) == ']')
largec = false;
else if(str.charAt(i)==')')
smallc = false;
//스택의 요소를 가져와서 열린 괄호면
if(stack.size() != 0) {
System.out.println("스택 크기"+stack.size());
for(int j=stack.size()-1;j>=0;j--) {
System.out.println("스택검사"+stack.get(j));
if(str.charAt(i) == ']') {
if(stack.get(j)=='[') {
largec = true;
System.out.println("뽑히는 애"+stack.get(j));
stack.remove(j);
break;
}
else
break;
}
else{ //(str.charAt(i) == ')') {
if(stack.get(j)=='(') {
smallc = true;
System.out.println("뽑히는 애"+stack.get(j));
stack.remove(j);
break;
}
else // [ 일 때
break;
}
}
}
}
else if(str.charAt(i)=='.') {
stack.clear();
}
}
if(smallc == true && largec==true)
System.out.println("yes");
else
System.out.println("no");
}
}
}
또 틀렸대
반례를 찾았따 !
([)]). 답은 no인데 yes로 나옴.
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
int ch=0;
String str = br.readLine(); //문자열을 입력받음
if(str.charAt(0)=='.')
break;
for(int i=0;i<str.length();i++) {
if(str.charAt(i) =='[' || str.charAt(i)=='(') { //문자요소가 괄호가 아니면 stack에 넣기
stack.add(str.charAt(i));
System.out.println(str.charAt(i));
}
else if(str.charAt(i) ==']' || str.charAt(i)==')'){//요소가 닫힌 괄호이면
System.out.println("지금문자"+str.charAt(i));
if(str.charAt(i) == ']')
largec = false;
else if(str.charAt(i)==')')
smallc = false;
//스택의 요소를 가져와서 열린 괄호면
if(stack.size() != 0) {
System.out.println("스택 크기"+stack.size());
for(int j=stack.size()-1;j>=0;j--) {
System.out.println("스택검사"+stack.get(j));
if(str.charAt(i) == ']') {
if(stack.get(j)=='[') {
largec = true;
System.out.println("뽑히는 애"+stack.get(j));
stack.remove(j);
break;
}
else {
ch=1;
break;
}
}
else{ //(str.charAt(i) == ')') {
if(stack.get(j)=='(') {
smallc = true;
System.out.println("뽑히는 애"+stack.get(j));
stack.remove(j);
break;
}
else {// [ 일 때
ch=1;
break;
}
}
}
}
}
else if(str.charAt(i)=='.') {
stack.clear();
}
}
if(smallc == true && largec==true && ch == 0)
System.out.println("yes");
else
System.out.println("no");
}
}
}
고쳤는데 또 틀렸어
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
if(ch == 1)break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true)
System.out.println("yes");
else System.out.println("no");
}
}
}
싹 지우고 다시 한 번 풀어봤는데 또 틀렸어
아 ! (. 입력했을 때 yes로 나와 !
조건을 수정했다
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
if(ch == 1)break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
if(current =='(') smallc = false;
else if(current =='[') largec = false;
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true)
System.out.println("yes");
else System.out.println("no");
}
}
}
아예 열린괄호를 만났을 때 smallc와 largec를 false로 바꿔버리는 걸로
아 근데 또 틀렸대 XX
반례를 또 찾았따
((). 바로 이거 ...!
수정하고 지금까지 반례 다 맞는데 또 틀렸대
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
if(ch == 1)break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true)
System.out.println("yes");
else System.out.println("no");
}
}
}
엥 모야 갑자기 잘 되던 " ."가 안 됨 !! 뭐야 아무것도 안 했는데 또 됨 ㅋㅋ... "/."하고 " ."했더니 안 되다가 예제 순서대로 입력하니까 또 되고.. 뭐
]]. 뒤에 /.나 " ." 입력하니까 안 된다 stack에 아무것도 없을 때..음..가 아니라
]]. 하면 largec가 false가 되어있는 상탠데 그 다음에괄호가 없는 조건이 나오면 true로 바꿔줄 수 있는 조건에 걸리질 않으니까 그대로 false값을 가져서 이상한 값이 나오는 거였음 !!
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
if(ch == 1) break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true)
System.out.println("yes");
else {
System.out.println("no");
largec=true;
smallc=true;
}
}
}
}
그거 다 수정했는데 또 틀렸대 씨
입출력형식 땜에 그런 줄 알고 예제랑 똑같이 한 번에 입력하고 한 번에 결과 출력하게 했는데 또 틀렸다
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
if(ch == 1) break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true)
sb.append("yes"+"\n");
//System.out.println("yes");
else {
//System.out.println("no");
sb.append("no"+"\n");
largec=true;
smallc=true;
}
}
System.out.println(sb);
}
}
흐으으음..... \n때문인가 싶어서 맞췄는데 또 틀림
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.') break; //첫 글자 .이면 반복 종료
sb.append("\n");
for(int i=0;i<str.length();i++) {
if(ch == 1) break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true) {
sb.append("yes");
}
//System.out.println("yes");
else {
//System.out.println("no");
sb.append("no");
largec=true;
smallc=true;
}
}
System.out.print(sb);
}
}
헐 ..ㅋㅋㅋ 첫글자가 .이어도 뒤에 내용이 더 있으면 종료하면 안 된대 !!!!!
그거 수정했는데도 계속 틀렷대
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.' && str.length() ==1) break; //첫 글자 .이면 반복 종료
//sb.append("\n");
for(int i=0;i<str.length();i++) {
if(ch == 1) break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true) {
sb.append("yes"+"\n");
}
//System.out.println("yes");
else {
//System.out.println("no");
sb.append("no"+"\n");
largec=true;
smallc=true;
}
}
System.out.print(sb);
}
}
갑자기 ( 이거 하나 넣을 때 yes나오고 지이이랄
뭐야 또 다시하니까 안 나 아
(
.
했을때는 문자열 끝이 .으로 끝난다메 (뒤에 . 안 붙이는 경우는 뺴야지
글 읽기 - 10페이지까지 반례 다 해봤으나 맞는데 자꾸 틀렸다고 뜹니 (acmicpc.net)
결국 질문 올림
하도 답답해서 답 찾아보니까 그냥 엄청 간단하게 했네 ...?
뭐임 개간단하게 풀었어 ㅡㅡ
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack <Character>stack = new Stack<>();
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine();
if(str.charAt(0)=='.' && str.length()==1) break;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)=='(' || str.charAt(i)=='[') {
stack.push(str.charAt(i));
}
else if(str.charAt(i)==')' || str.charAt(i)==']') {
if(!stack.isEmpty()) {
if(str.charAt(i)==')') {
if(stack.peek() =='(') {
stack.pop();
}
else {
ch = 1;
break;
}
}
else if(str.charAt(i)==']') {
if(stack.peek() =='[') {
stack.pop();
}
else {
ch = 1;
break;
}
}
}
else {
ch=1;
break;
}
}
}if(ch==0 && stack.isEmpty()) {
sb.append("yes"+"\n");
}
else sb.append("no"+"\n");
}
System.out.print(sb);
}
}
이전거랑 다른게 뭐야 !>!?!?!?!?!?!?!
/.
.
]].
[[.
/.
(().
(.
).
[.
].
.().
([)]).
.
//반례모음
원래 ArryaList도 수정을 해서 맞았다.
smallc랑 largec 에서 오류가 있었나보다.....
뺐어도 전혀 문제가 없었네
package algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.' && str.length() ==1) break; //첫 글자 .이면 반복 종료
for(int i=0;i<str.length();i++) {
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
stack.remove(j);
break;
}
else{
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
stack.remove(j);
break;
}
else {
ch = 1;
break;
}
}
}
}
else {
ch=1;
break;
}
}
}
if(ch==0 && stack.size()==0) {
sb.append("yes"+"\n");
}
else {
sb.append("no"+"\n");
}
}
System.out.print(sb);
}
}
어제 내가 4시간동안 고민한 코드 질문게시판에 답글을 반례로 달아주셔서 해봤는데 ][]. 를 하면 yes가 나왔다.
이는 )나]의 닫힌 괄호가 나왔을 때 스택이 비어있을 경우를 고려하지 않은 것 ..............
아주 간단하게 해결해버렸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean smallc=true;
boolean largec=true;
List <Character>stack = new ArrayList<>(); //Collection프레임워크의 List를 사용해서 stack생성
while(true) {
stack.clear();
int ch = 0;
String str = br.readLine(); //문자열 입력
if(str.charAt(0)=='.' && str.length() ==1) break; //첫 글자 .이면 반복 종료
//sb.append("\n");
for(int i=0;i<str.length();i++) {
if(ch == 1) break;
char current = str.charAt(i);
if(current =='(' || current=='[') { //문자가 열린 괄호이면
stack.add(current); //스택에 입력
}
else if(current ==')' || current==']') { //문자가 닫힌 괄호이면
if(current ==')') smallc = false;
else if(current ==']') largec = false;
if(stack.size() != 0) { //스택이 비어있지 않을 때
for(int j=stack.size()-1;j>=0;j--) { //스택의 맨 위부터 탐색
if(current ==']' ) {
if(stack.get(j)=='[') {
largec= true;
stack.remove(j);
break;
}
else if(stack.get(j) =='(') {
ch = 1;
break;
}
}
else if(current ==')' ) {
if(stack.get(j)=='(') {
smallc =true;
stack.remove(j);
break;
}
else if(stack.get(j)=='[') {
ch = 1;
break;
}
}
}
}
else { //스택이 비어있으면
ch=1;
break;
}
}
else if(current == '.') { //문자열의 끝이 .이면 스택 비우고 새로 시작
if(stack.size() != 0) ch=1;
stack.clear();
break;
}
}
if(ch==0 && smallc == true && largec == true && stack.size()==0) {
sb.append("yes"+"\n");
}
//System.out.println("yes");
else {
//System.out.println("no");
sb.append("no"+"\n");
largec=true;
smallc=true;
}
}
System.out.print(sb);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
10811번 문제 : 바구니 뒤집기 (0) | 2023.04.15 |
---|---|
10926번 문제 : ??! (0) | 2023.04.15 |
2869번 문제 : 달팽이는 올라가고 싶다 (0) | 2023.04.14 |
2805번 문제 : 나무 자르기 (0) | 2023.04.11 |
2798번 문제 : 블랙잭 (0) | 2023.04.03 |