count
: 조각난 개수
numOfBars
: 레이저가 자르는 그 시점의 막대기의 개수
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
// 쇠막대기 자르기
public class SWEA5432 {
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("res/sample_input2.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb;
int T = Integer.parseInt(br.readLine());
int numOfLines = 0;
for (int test_case = 1; test_case <= T; test_case++) {
sb = new StringBuilder();
int cnt = 0; // 조각난 개수
String str = br.readLine();
// '()' 레이저를 '@'으로 치환
str = str.replace("()", "@");
char[] temp = str.toCharArray();
for (char c : temp) {
switch (c) {
case '(':
numOfLines++;
break;
case ')':
cnt += 1; // 라인 하나 끝나면 +1
numOfLines--;
break;
case '@':
cnt += numOfLines; // 레이저 만나면 라인 수 만큼 증가
break;
}
}
sb.append("#" + test_case);
sb.append(" ");
sb.append(cnt);
System.out.println(sb.toString());
}
}
}
function solution(s) {
let answer = 0; // 카운트
let numOfBars = 0; // 막대기 수
s = s.replaceAll('()', '*'); // 레이저 치환
for (const x of s) {
switch (x) {
case '(':
numOfBars++;
break;
case ')':
answer += 1; // 막대기 하나 끝나면 +1
numOfBars--;
break;
case '*':
answer += numOfBars; // 레이저 만나면 막대기 수 만큼 증가
break;
}
}
console.log(answer);
}
let str = "(((()(()()))(())()))(()())";
solution(str);