반응형
https://www.acmicpc.net/problem/4949
위의 문제는 BaekJoon Online Judge의 단계별로 풀어보기 중 17단계 스택의 카테고리에 포함되어 있는 문제이다.
나는 자바 라이브러리에 포함된 스택을 사용하지 않고,
스택 알고리즘의 연습을 위해 따로 스택 클래스를 만들어 사용하였다.
문자열을 입력받고 '(', '[', ')', ']'를 제외한 문자들은 건너뛰며
'('와 '['가 입력될 땐 push() 함수를 호출하여 스택에 입력하고,
')'와 ']'가 입력되면 pop() 함수를 호출하여 스택에 입력되어 있던 괄호와 비교하고
맞으면 스택포인터 변수를 하나씩 낮추고 괄호의 짝이 맞지 않으면 -1을 리턴하여
괄호검사를 멈추고 no를 출력한다.
import java.util.Scanner;
class Stack_World {
private int top;
private int size;
private int Output;
private char[] Brackets;
public Stack_World (int size) {
top = -1;
this.size = size;
Brackets = new char[this.size];
}
public void push(char item) {
Brackets[++top] = item;
}
public int pop(char item) {
Output = 0;
if(top == -1)
return Output = -1;
if(item == ')' && Brackets[top] == '(')
top--;
else if(item == ']' && Brackets[top] == '[')
top--;
else
Output = -1;
return Output;
}
public int top() {
return this.top;
}
}
public class Question_4949 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int Output = 0;
String Input = sc.nextLine();
Stack_World stk = new Stack_World(Input.length());
if(Input.charAt(0) == '.')
break;
char[] X = Input.toCharArray();
for(char e : X) {
if(e == '(' || e == '[')
stk.push(e);
if(e == ')' || e == ']')
Output = stk.pop(e);
if(Output == -1)
break;
}
if(Output == -1 || stk.top() != -1)
System.out.println("no");
else
System.out.println("yes");
}
}
}
블로그를 개설하여 처음 풀이를 올려본다.
앞으로도 꾸준히 문제풀이를 올리고 한 단계씩 더 발전하는 모습을 보여야겠다.
반응형
'BaekJoon' 카테고리의 다른 글
[백준] 1037번 : 약수(JAVA) (0) | 2019.11.20 |
---|---|
[백준] 5086번 : 배수와 약수(JAVA) (0) | 2019.11.18 |
[백준] 11650번 : 좌표 정렬하기(JAVA) (0) | 2019.11.18 |
[백준] 10989번 : 수 정렬하기 3(JAVA) (0) | 2019.11.17 |
[백준] 2164번 : 카드2(JAVA) (0) | 2019.11.17 |
댓글