https://www.acmicpc.net/problem/4949
문제
풀이
[
(
이 입력이 되면, stack에 추가를 한다.)
]
이 입력이 되면 stack.peek()을 했을때, 순서에 맞게 나와져야 한다. 예를 들어 )
을 입력했으면, (
이 꺼내져야하고, ]
을 입력했으면 stack.peek()을 했을 때, [
이 꺼내져야 한다.위의 문제 코드 작성을 위해서 2단계로 나누기로 했다.
메인메소드의 기능
이번 알고리즘 문제를 푸는 코드이다.
다음과 같은 기능을 갖는다.
Character 타입의 stack 생성한다.
입력받은 문자열의 길이만큼 charAt을 이용해 char타입 변수 c에 저장한다.
(
, [
가 입력되면 c에 저장하고, stack에 넣어준다.
c = )
이면, stack이 비어있거나, stack.peek() != (
이면 "no"를 출력한다.
소스코드
import java.util.Scanner;
import java.util.Stack;
public class Baekjoon_4949 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s;
while (true) {
s = scan.nextLine();
if (s.equals(".")) {
break;
} else
System.out.println(solve(s));
}
}
private static String solve(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '[')
stack.push(c);
else if (c == ')') {
if (stack.isEmpty() || stack.peek() != '(')
return "no";
else
stack.pop();
} else if (c == ']') {
if (stack.isEmpty() || stack.peek() != '[')
return "no";
else
stack.pop();
}
}
if (stack.isEmpty())
return "yes";
else
return "no";
}
}