풀이
스택을 이용해서 문자열에서 현재 문자가 '(' 일 경우 '('를 카운팅 할 인덱스를 따로 두어 해당 인덱스로 스택에 추가했습니다.
다음으로 ')' 일 경우 만약 '('를 카운팅한 인덱스와 스택의 top의 결과가 1이라면 레이저 이므로 현재 스택의 크기가 잘린 쇠막대기의 개수가 됩니다.
다음으로 1이 아니라면 쇠막대기가 끝났으므로 해당 쇠막대기의 끝 부분또한 포함 시켜야 하므로 +1을 해주어 해결했습니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Solution {
public static int answer;
public static String s;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder("");
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; ++tc) {
Stack<Integer> stk = new Stack<Integer>();
s = br.readLine();
answer = 0;
int idx = 0;
for (int i = 0; i < s.length(); ++i) {
if (s.charAt(i) == '(') {
stk.push(idx++);
}
else if (s.charAt(i) == ')') {
if (idx - stk.peek() == 1) {
stk.pop();
answer += stk.size();
}
else {
stk.pop();
answer += 1;
}
}
}
sb.append("#").append(tc).append(" ").append(answer).append("\n");
}
System.out.print(sb);
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[Java] SWEA 7699번 수지의 수지 맞는 여행 (0) | 2021.03.19 |
---|---|
[Java] SWEA 4050번 재관이의 대량 할인 (0) | 2021.03.18 |
[Java] SWEA 1258번 행렬찾기 (0) | 2021.03.16 |
[Java] SWEA 4613번 러시아 국기 같은 깃발 (0) | 2021.03.15 |
[Java] SWEA 1767번 프로세서 연결하기 (0) | 2021.03.14 |