https://www.acmicpc.net/problem/4949
문제 분석
계속해서 문장을 입력받으며, "." 이 입력되면 종료된다.
각각의 문장 내에 포함된 소괄호 () 와 대괄호 [] 는 항상 짝을 이루어야 하며, 짝이 이루어진 문장이면 "yes",
하나라도 제대로 짝 지어지지 않는다면 "no" 를 출력하여야 한다.
아예 문장에 소괄호, 대괄호가 포함되지 않은 문장도 "yes"로 취급한다.
풀이
스택을 활용해 풀 수 있다.
좌측 괄호 ( 나 [ 가 주어지면 스택에 push() 하고, 우측 괄호 )나 ]를 만났을때 pop()으로 가장 마지막에 push된 문자를 꺼내
해당 괄호와 쌍을 이루는 지 체크하면 된다.
쌍이 이루어지지 않는다면 바로 "no"를 리턴한다.
문자열 순회가 끝난 뒤 스택에 값이 남아있어도 괄호가 쌍을 이루지 않은 것 이므로 "no"를 리턴한다.
코드
public class Example4949 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer bf = new StringBuffer();
while (true) {
String str = br.readLine();
if (str.equals(".")) {
break;
}
bf.append(solution(str) + "\n");
}
System.out.println(bf.toString());
}
public static String solution(String str) {
String answer = "yes";
Stack<Character> stack = new Stack<>();
for (char c : str.toCharArray()) {
if (c == '(' || c == '[') {
stack.push(c);
} else if (c == ')' || c == ']') {
if (stack.isEmpty()) {
return "no";
}
char pop = stack.pop();
if (c == ')') {
if (pop != '(') {
return "no";
}
} else {
if (pop != '[') {
return "no";
}
}
}
}
if (!stack.isEmpty()) answer = "no";
return answer;
}
}
댓글 피드백은 언제나 환영합니다!
'CodingTest > 백준' 카테고리의 다른 글
백준 1966번 - 프린터 큐 (1) | 2023.12.08 |
---|---|
백준 1874번 - 스택 수열 (1) | 2023.12.08 |
백준 9012번 - 괄호 (0) | 2023.09.28 |
백준 10845 - 큐 (0) | 2023.09.28 |
백준 4153번 - 직각삼각형 (0) | 2023.09.22 |