ultra_dev
올바른 괄호(Stack) 본문
올바른 괄호
설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력
첫 번째 줄에 YES, NO를 출력한다.
예시 입력 1
(()(()))(()
예시 출력 1
NO
📌스택 LIFO 구덩이 / push, pop // 대괄호든 소괄호든 그런 문제들은 거의 스택 쓰면 해결
isEmpty() 스택 비어있으면 true 아니면 false
📌Character….toCharArray….
여는 괄호면 그냥 push로 넣고!!
닫는 괄호면 앞에가 비어있으면 No!
안비어있으면 pop!
이 과정이 끝났는데도 스택에 남아있으면 NO~!
📌큐 FIFO 원통 (큣대 생각 일직선)
import java.util.Scanner;
import java.util.Stack;
class Main {
public String solution(String str) {
String answer = "YES";
Stack<Character> stack = new Stack<>();
//String str은 그대로 있고 str기반으로 한 배열이 추가로 만들어지는 거지
for (char x : str.toCharArray()) {
//닫는 괄호가 많은 상황, char니까 ""아니고 ''임 ㅡ!!!!!
//x가 여는 괄호라면 그냥 넣고~
if (x == '(') {
stack.push(x);
} else { //이제 x가 닫는 괄호라면
if (stack.isEmpty()) { //그리고 앞에가 비어있으면
return "NO"; //당연히 안되는 것!
}
//닫는 괄호 일때 앞에가 안비어있으면 pop하는거지~!
stack.pop();
}
}
if (!stack.isEmpty()) { //위에 for문이 끝났는데도 stack이 남아있다면
return "NO";
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(T.solution(str));
}
}
'알고리즘' 카테고리의 다른 글
크레인 인형 뽑기(Stack) (0) | 2023.03.31 |
---|---|
괄호문자제거(Stack) (0) | 2023.03.30 |
K번째 큰 수 (TreeSet) (0) | 2023.03.29 |
매출액의 종류 (0) | 2023.03.29 |
아나그램(해쉬) (0) | 2023.03.27 |
Comments