-
[백준/JAVA] 괄호의 값Algorithm 2024. 10. 19. 15:42
https://www.acmicpc.net/problem/2504
- 문제 풀이
- ( 또는 [를 만났을 때 스택에 추가하고, 해당 값의 곱셈값을 temp에 반영합니다.
- ) 또는 ]를 만났을 때:
- 스택이 비어 있거나, 올바르지 않은 괄호 구조가 되면 0을 출력하고 종료합니다.
- 이전 문자가 열린 괄호 ( 또는 [일 때 answer에 temp 값을 누적합니다.
- 모든 괄호열이 끝난 후 스택에 남아 있는 괄호가 없으면 최종 answer 값을 출력합니다.
- 정답 코드
// https://www.acmicpc.net/problem/2504 package Data_Structure.괄호의값; import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); // (()[[]])([]) Stack<Character> stack = new Stack<>(); int answer = 0; int temp = 1; for(int i = 0; i < s.length(); i++) { if(s.charAt(i) == '('){ stack.push(s.charAt(i)); temp *= 2; }else if(s.charAt(i) == '[') { stack.push(s.charAt(i)); temp *= 3; }else if(s.charAt(i) == ')') { if(stack.isEmpty() || stack.peek() == '[' || stack.peek() == ']' ) { System.out.println(0); return; } if(s.charAt(i-1) == '(') { // stack.peek()이 아니라 s.charAt(i-1) answer += temp; } stack.pop(); temp /= 2; // temp값 초기화 }else if(s.charAt(i) == ']') { if(stack.isEmpty() || stack.peek() == '(' || stack.peek() == ')') { System.out.println(0); return; } if(s.charAt(i-1) == '[') { // stack.peek()이 아니라 s.charAt(i-1) answer += temp; } stack.pop(); temp /= 3; // temp값 초기화 } } if(!stack.isEmpty()) { System.out.println(0); }else{ System.out.println(answer); } } }
'Algorithm' 카테고리의 다른 글
[백준/JAVA] 1620번: 나는야 포켓몬 마스터 이다솜 (0) 2024.10.22 [백준/JAVA] 2493번: 탑 (0) 2024.10.19 [백준/JAVA] 쇠막대기 (0) 2024.10.19 [백준/JAVA] 스택 수열 (0) 2024.10.19 [백준/JAVA] 프린터 큐 (0) 2024.10.17