올바른 괄호
스택
LIFO
스택의 대표적인 문제
Stack<Character> stack = new Stack<>();
import java.util.*;
public class Main {
public String solution(String str){
String answer = "YES";
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()){
if(x =='(') stack.push(x);
else {
if(stack.isEmpty()) return "NO";
stack.pop();
}
}
if(!stack.isEmpty()) return "NO";
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
괄호문자제거
내 코드(정답) - 하지만 스택으로 풀지 않았다..
import java.util.*;
public class Main {
public String solution(String str){
String answer = "";
Stack<Character> stack = new Stack<>();
int check = 0;
for(char i : str.toCharArray()){
if(i == '(') check = check + 1;
else if(i == ')') check = check -1;
if(check == 0){
if(i != ')'){
answer += i;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
정답 코드
import java.util.*;
public class Main {
public String solution(String str){
String answer = "";
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()){
if(x == ')') {
while(stack.pop() != '(');
}
else stack.push(x);
}
for(int i = 0; i < stack.size(); i++) answer += stack.get(i);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
반응형
'CS 기초 > 알고리즘 · 문제풀이' 카테고리의 다른 글
Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] - 최대 매출 (Sliding Window) (0) | 2022.03.19 |
---|---|
Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] - 두 배열 합치기 / 공통원소 구하기 (0) | 2022.03.18 |
HashMap, TreeSet (해쉬, 정렬지원 Set) - 학급 회장 (0) | 2022.03.13 |
카카오 코딩 테스트 - 신규 아이디 추천 (0) | 2022.03.12 |
[JAVA] Array(1, 2차원 배열) - 격자판 최대합 / 봉우리 (0) | 2022.03.05 |