728x90
https://www.acmicpc.net/problem/2504
1. Buffered Reader / toCharArray
package BKD_0x8_Stack_Application;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ_2504 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
int temp=1;
int total=0;
for(int i=0;i<input.length();i++){
if (input.charAt(i)=='(') {
stack.push('(');
temp *= 2;
}
else if (input.charAt(i)=='[') {
stack.push('[');
temp *= 3;
}
else if (input.charAt(i)==')') {
if (stack.isEmpty() || stack.peek() != '(') {
total = 0;
break;
} else if (!stack.isEmpty() && input.charAt(i-1)== '(') {
total += temp;
}
stack.pop();
temp /= 2;
}
else if (input.charAt(i)==']'){
if(stack.isEmpty() || stack.peek() !='[') {
total=0;
break;
}
else if(!stack.isEmpty()&& input.charAt(i-1)=='[') {
total+=temp;
}
stack.pop();
temp/=3;
}
}
if(!stack.isEmpty()) System.out.println(0);
else System.out.println(total);
}
}
2. Buffered Reader / toCharAt
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
int temp=1;
int total=0;
for(int i=0;i<input.length();i++){
if (input.charAt(i)=='(') {
stack.push('(');
temp *= 2;
}
else if (input.charAt(i)=='[') {
stack.push('[');
temp *= 3;
}
else if (input.charAt(i)==')') {
if (stack.isEmpty() || stack.peek() != '(') {
total = 0;
break;
} else if (!stack.isEmpty() && input.charAt(i-1)== '(') {
total += temp;
}
stack.pop();
temp /= 2;
}
else if (input.charAt(i)==']'){
if(stack.isEmpty() || stack.peek() !='[') {
total=0;
break;
}
else if(!stack.isEmpty()&& input.charAt(i-1)=='[') {
total+=temp;
}
stack.pop();
temp/=3;
}
}
if(!stack.isEmpty()) System.out.println(0);
else System.out.println(total);
}
}
아래 결과가 1번, 위의 결과가 2번 이다.
👀 주목주목!
- 이전 문자 탐지 필요. == 문장 전체에 대한 정보 활용 요구
- 괄호의 올바른 대칭 요구
- 분배법칙 활용 시 효율적
고민한 점
1. 언제 temp 값에 각 괄호에 해당하는 값을 곱해야 하는가
- 처음 문제 해결 진행 시 괄호가 닫힐 때 temp 값에 곱하는 방향을 시도하였으나 실패
728x90
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
52 삐약 : 백준 1021| 회전하는큐 [바킹독 문제 풀이Deque|JAVA] (0) | 2024.05.08 |
---|---|
51 삐약 : 백준 1926| 그림 [바킹독 문제 풀이|BFS|JAVA] (0) | 2024.01.02 |
49 삐약 : 백준 10799| 쇠막대기 [바킹독 문제 풀이|Stack|JAVA] (0) | 2023.12.20 |
48 삐약 : 백준 9012| 괄호 [바킹독 문제 풀이|Stack|JAVA] (0) | 2023.12.20 |
47 삐약 : 백준 3986 | 좋은 단어 | [바킹독 문제 풀이|Stack|JAVA] (0) | 2023.12.20 |