반응형
이 문제는 스택을 활용하여 푸는 문제이다. 자바에서는 ArrayDeque도 있기에 둘 중 편한 방법으로 풀이하면 된다.
1. Stack
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
sc.close();
int answer = 0;
Stack<Character> stack = new Stack<>();
char[] arr = s.toCharArray();
for (int i = 0 ; i < arr.length ; i++) {
char x = arr[i];
if (x == '(') {
stack.push(x);
} else {
char prev = arr[i - 1];
if (prev == '(') {
stack.pop();
answer += stack.size();
} else {
stack.pop();
answer += 1;
}
}
}
System.out.println(answer);
}
}
풀이과정
'('일 때는 스택에 더해주고, "()" 이렇게 한 쌍이 되는 순간 레이저가 되므로 ')'일 때, 바로 직전의 입력이 '('이면 stack.pop()을 하고 answer에 stack.size()를 더해준다. 그리고 직전의 입력이 '('이 아닐 때 ')'이 입력되는 경우에는 레이저가 닫히는 것이므로 answer에 1을 더해준다.
2. ArrayDequeue
이것도 선언만 ArrayDequeue로 바꾸고, 코드 내용은 똑같다.
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
sc.close();
int answer = 0;
ArrayDeque<Character> stack = new ArrayDeque<>();
char[] arr = s.toCharArray();
for (int i = 0 ; i < arr.length ; i++) {
char x = arr[i];
if (x == '(') {
stack.push(x);
} else {
char prev = arr[i - 1];
if (prev == '(') {
stack.pop();
answer += stack.size();
} else {
stack.pop();
answer += 1;
}
}
}
System.out.println(answer);
}
}
반응형
'Algorithm > baekjoon' 카테고리의 다른 글
[백준 16194/자바(java)] 카드 구매하기 2 (0) | 2023.08.16 |
---|---|
[백준 24445/자바(java)] 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2023.08.15 |
[백준 1874/자바(Java)] 스택으로 오름차순 수열 만들기 (0) | 2023.07.21 |
[백준 11003/자바(Java)] 최솟값 찾기 (0) | 2023.07.20 |
[백준 11866 파이썬(Python) / 자바(Java)] 요세푸스 문제 0 (0) | 2023.06.28 |