https://www.acmicpc.net/problem/10799
1. 우선, 문자별로 처리를 하기 위해서 "()"을 모두 replace한다.
* 함수를 쓸 때, str.replaceAll("()", "r")을 하면 안되고, '('와 ')'은 모두 escape 문자이므로 앞에 '\\'을 붙여줘야 한다.
2. 레이저 포인트를 쐈을 때, 레이저 이전의 막대의 개수를 파악하고 모두 더한 후에 마지막 막대의 개수만 더해준다.
* 막대의 개수를 파악하기 위해서, cur과 end라는 변수를 사용한다. 문제의 예제를 보면서 코드를 작성하면 쉽게 해결할 수 있다.
해설코드(Java).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
static BufferedReader br;
static String str;
static int result = 0;
public static void main (String[] args) throws java.lang.Exception
{
br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
str = str.replaceAll("\\(\\)", "r");
int cnt = 0;
int end = 0;
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if(c == '('){
cnt += 1;
}else if(c == ')'){
end += 1;
if(cnt >= 1) cnt -= 1;
}else if(c == 'r'){
result += (cnt + end);
end = 0;
}
}
result += end;
System.out.println(result);
}
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 1933] 스카이라인(Java, Treemap, 설명, 간단한 코드) (0) | 2020.08.12 |
---|---|
[BOJ 1863] 스카이라인 쉬운거(Java, Stack) (0) | 2020.08.12 |
[BOJ 3671] 산업 스파이의 편지(Java, 소수 구하기, DFS) (0) | 2020.08.08 |
[BOJ 2981] 검문(Java, 유클리드 호제법, Set) (0) | 2020.08.08 |
[BOJ 7569] 토마토(JAVA, BFS, QUEUE) (0) | 2020.08.07 |