📝문제

📝알고리즘
//BufferedReader를 사용하여 입력받음
//입력이 "."이면 종료
//isBalanced를 true로 초기화함
//열린 괄호는 스택에 push
//닫힌 괄호는 스택이 비어있거나 스택 최상단의 괄호와 짝이 맞지 않으면 isBalanced를 false로 설정함
//스택 최상단과 짝이 맞으면 스택에서 pop함
//for문을 다 순회한 이후에 스택이 비어 있는 경우에도 isBalanced를 false로 설정
//isBalanced가 true면 "yes"를 아니면 "no"를 출력
❌틀린 코드
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack=new Stack<>();
while(true){
String input=br.readLine();
int answer=1;
if(input.equals("."))
break;
boolean isBalanced=true;
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()!='('){
isBalanced=false;
break;
}
stack.pop();
}
else if(c==']'){
if(stack.isEmpty() || stack.peek()!='['){
isBalanced=false;
break;
}
stack.pop();
}
}
if(!stack.isEmpty()){
isBalanced=false;
}
System.out.println(isBalanced ? "yes": "no");
}
}
}
📝틀린 이유
스택을 while문 바깥에서 선언해서 스택을 제대로 초기화하지 않음➡️이전 입력에서 남아 있던 괄호가 다음 입력에도 영향을 주는 문제가 생길 수 있음
✅while문 안에서 스택을 새로 생성해서 반복문이 실행될 때마다 스택이 초기화되도록 수정함
📝수정한 코드
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
Stack<Character> stack=new Stack<>();
String input=br.readLine();
int answer=1;
if(input.equals("."))
break;
boolean isBalanced=true;
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()!='('){
isBalanced=false;
break;
}
stack.pop();
}
else if(c==']'){
if(stack.isEmpty() || stack.peek()!='['){
isBalanced=false;
break;
}
stack.pop();
}
}
if(!stack.isEmpty()){
isBalanced=false;
}
System.out.println(isBalanced ? "yes": "no");
}
}
}
📌기록하고 싶은 내용
문자열 비교➡️.equals()를 사용