https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm
1. 아이디어
Stack 자료구조를 활용하면 해결할 수 있다.
2. 문제풀이
열린 괄호 뒤에 닫힌 괄호가 오면 레이저, 닫힌 괄호 뒤에 닫힌 괄호가 오면 쇠막대기의 끝 부분이 된다. 이를 위해 현재 괄호 이전에 어떤 괄호가 나왔는지 before 변수에 저장하는 방식으로 구현했다. 열린 괄호는 쇠막대기의 시작 또는 레이저 후보이므로 일단 Stack에 넣고 닫힌 괄호가 등장했을 때 레이저면 지금까지 등장한 쇠막대기의 수만큼 조각이 생기고, 닫힌 괄호가 쇠막대기의 끝이면 해당 쇠막대기 조각 1개가 생긴다.
3. 코드
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
// BufferedReader br = new BufferedReader(new InputStreamReader(Solution.class.getResourceAsStream("sample_input.txt")));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
char[] input = br.readLine().toCharArray();
Deque<Character> stack = new ArrayDeque<>();
char before = '\u0000';
int cnt = 0;
for (char c : input) {
if (c == '(') {
stack.push('(');
} else {
stack.pop();
if (before == '(') cnt += stack.size();
else cnt++;
}
before = c;
}
sb.append("#").append(tc).append(" ").append(cnt).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > SWEA' 카테고리의 다른 글
[SWEA] 2001번 - 파리 퇴치 [Java] (0) | 2025.02.13 |
---|---|
[SWEA] 8931번 - 제로 [Java] (0) | 2025.02.13 |
[SWEA] 1984번 - 중간 평균값 구하기 [Java] (0) | 2025.02.13 |
[SWEA] 2005번 - 파스칼의 삼각형 [Java] (0) | 2025.02.13 |
[SWEA] 2068번 - 최대수 구하기 [Java] (0) | 2025.02.13 |