[JAVA] 34. 올바른 괄호 - stack
2021. 10. 24. 11:19
728x90
설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력
첫 번째 줄에 YES, NO를 출력한다.
예시 입력 1
(()(()))(()
예시 출력 1
NO
내 풀이 - 괄호의 갯수만 비교하면 된다고 생각함 => ex) )(())( 괄호의 갯수는 맞지만 알맞은 괄호 x
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.next();
String answer = "NO";
HashMap<Character,Integer> map = new HashMap<>();
for(char ch : str.toCharArray()){
map.put(ch, map.getOrDefault(ch,0)+1);
}
if(map.get('(')==map.get(')')){
answer = "YES";
}
System.out.println(answer);
}
}
다른 풀이
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.next();
String answer = "YES";
Stack<Character> stack = new Stack<>();
for(char ch : str.toCharArray()){
if(ch == '('){
stack.push(ch);
}else{
if(stack.isEmpty()){ // 닫는 괄호가 더 많을 때
answer = "NO";
break;
}
stack.pop();
}
}
// 여는 괄호가 더 많을 때
if(!stack.isEmpty()){
answer = "NO";
}
System.out.println(answer);
}
}
STACK
값을 넣을 때는 push
값을 뺄 때는 pop
isEmpty();
728x90
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 36. 크레인 인형뽑기(카카오) (0) | 2021.10.24 |
---|---|
[JAVA] 35. 괄호문자 제거 -STACK (0) | 2021.10.24 |
[JAVA] 33. k번째 큰수 (TreeSet) (0) | 2021.10.23 |
[JAVA] 32. 모든 아나그램찾기 (0) | 2021.10.23 |
[JAVA] 31. 매출액의 종류 (0) | 2021.10.23 |