728x90
반응형
1. 올바른 괄호
설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력
첫 번째 줄에 YES, NO를 출력한다.
예시 입력 1
(()(()))(()
예시 출력 1
NO
import java.util.Scanner;
import java.util.Stack;
//올바른 괄호
//isEmpty로 확인
//push, peek,pop
public class Main {
public String solution(String str) {
String answer = "YES";
Stack<Character> stack = new Stack<>();
for (char x : str.toCharArray()) {
stack.push(x);
}
int cnt = 0;
while (!stack.isEmpty()) {
if (stack.pop() == ')') {
if (stack.isEmpty())
return answer = "NO";
while (stack.pop() != '(') {
cnt++;
}
while (cnt != 0) {
stack.push(')');
cnt--;
}
} else
answer = "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.println(T.solution(str));
}
}
-> 넣고 나서 확인하는 방법, Runtime Error 발생하는 테스트케이스 존재
import java.util.*;
public class Main {
public String solution(String str) {
char[] arr = str.toCharArray();
Stack<Character> stack = new Stack<>();
String answer = "NO";
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '(')
stack.push(arr[i]);
else if (arr[i] == ')' && !stack.isEmpty())
stack.pop();
else if (arr[i] == ')' && stack.isEmpty())
return answer;
}
if (stack.isEmpty()) {
return answer = "YES";
} else
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
1. Stack 이용
2. cnt 이용
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str= in.next();
System.out.println(Solution(str));
}
private static String Solution(String str){
Stack<Character> stack = new Stack<>();
for(char c:str.toCharArray()){
if(stack.isEmpty()){
if(c==')') return "NO";
else stack.push(c);
}
else if(!stack.isEmpty()){
if(stack.peek()=='(' && c==')')
stack.pop();
else stack.push(c);
}
}
return stack.isEmpty()?"YES":"NO";
}
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str= in.next();
System.out.println(Solution(str));
}
private static String Solution(String str){
int cnt=0;
for(char c:str.toCharArray()){
if(c==')'){
cnt--;
}
else if(c=='('){
cnt++;
}
if(cnt<0){
return "NO";
}
}
return cnt==0?"YES":"NO";
}
}
+) 03.03
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.next();
Main main = new Main();
System.out.println(main.solution(str));
}
public String solution(String str){
String answer="YES";
Stack<Character> stack = new Stack<>();
for(char c:str.toCharArray()){
if(c==')'&&!stack.isEmpty() && stack.peek()=='(') stack.pop();
else stack.push(c);
}
if(!stack.isEmpty()) return answer="NO";
return answer;
}
}
728x90
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.05 - StackQueue] 03. 크레인 인형뽑기(카카오) (0) | 2022.05.20 |
---|---|
[Ch.05 - StackQueue] 02. 괄호문자제거 (0) | 2022.05.20 |
[Ch.04 - HashTree] 03. 매출액의 종류 # (0) | 2022.05.19 |
[Ch.04 - HashTree] 02. 아나그램(해쉬) (+ 삼항연산자) (0) | 2022.05.19 |
[Ch.04 - HashTree] 01. 학급 회장(해쉬) (+Map.Entry, entrySet()) (0) | 2022.05.19 |