반응형
🔺 문제
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
🔺 코드
- 틀림
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String s = br.readLine();
if(s == null || s.isEmpty()) break;
s = s.replaceAll("[a-zA-Z]","").replaceAll(" ", "").replaceAll("\\.","");
//System.out.println(s);
Stack<String> stack = new Stack<>();
for(int i = 0 ; i < s.length();i++) {
String str = s.substring(i,i+1);
switch(str) {
case "(":
stack.push("(");
break;
case ")":
if(stack.isEmpty()) stack.push(")");
else if(!stack.isEmpty() && stack.peek().equals("(")) stack.pop();
break;
case "[":
stack.push("[");
break;
case "]":
if(stack.isEmpty()) stack.push("]");
else if(!stack.isEmpty() && stack.peek().equals("[")) stack.pop();
break;
}
}
if(stack.isEmpty()) System.out.println("yes");
else System.out.println("no");
stack.clear();
}
}
}
- 정답
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String s = br.readLine();
if(s == null || s.isEmpty() || s.equals(".")) break;
s = s.replaceAll("[a-zA-Z]","").replaceAll(" ", "");
//System.out.println(s);
Stack<Character> stack = new Stack<>();
boolean isValid = true;
for(int i = 0 ; i < s.length();i++) {
char c = s.charAt(i);
if(c == '(' || c == '[') {
stack.push(c);
}
else if(c == ')' || c == ']') {
if(stack.isEmpty()) {
isValid = false;
break;
}
else {
char top = stack.pop();
if((c == ')' && top != '(') || (c == ']' && top != '[')) {
isValid = false;
break;
}
}
}
}
if(!stack.isEmpty()) isValid = false;
System.out.println(isValid ? "yes" : "no");
}
}
}
입력의 종료조건, 맨 마지막에 온점 하나가 입력으로 들어오면 종료시켜야 하는데 틀린 코드에서는 이걸 빼먹었다.
그리고 boolean 변수를 설정해 해당 문자열이 균형 잡혀있는지 여부를 알게 했다.
🔺 다른 풀이들
[백준] 4949번 : 균형잡힌 세상 - JAVA [자바]
www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보
st-lab.tistory.com
조건을 만족하지 않으면 바로 return "no"
를 때려버리셨다.
💬 느낀 점
너무 어렵게 푼 느낌,,,
정규표현식 하고 막,,
담엔 풀이 시간을 줄여보자!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
반응형