https://www.acmicpc.net/problem/1662
1662번: 압축
압축되지 않은 문자열 S가 주어졌을 때, 이 문자열중 어떤 부분 문자열은 K(Q)와 같이 압축 할 수 있다. K는 한자리 정수이고, Q는 0자리 이상의 문자열이다. 이 Q라는 문자열이 K번 반복된다는 뜻이
www.acmicpc.net
저는 재귀를 이용해 문제를 해결하였습니다.
해당 문자를 사용했는지 안했는지를 체크하고 안 했다면 cnt(결과 길이)값을 늘립니다.
'(' 라면 앞의 숫자를 빼고 cnt를 줄입니다. (앞의 숫자는 길이로 들어가지 않고 곱셈에 활용되기 때문입니다.)
앞의 숫자 * 재귀 함수를 통해 괄호 안에 있는 결과를 가져오고 곱합니다.
')' 라면 지금 cnt를 리턴하여 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ_1662 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String command = br.readLine();
boolean[] visited = new boolean[command.length()];
int length = dfs(command,0,visited);
System.out.println(length);
}
private static int dfs( String command , int index , boolean[] visited){
int cnt = 0;
for(int i = index ; i < command.length() ; i++){
char ch = command.charAt(i);
if(ch == '(' && !visited[i]){
visited[i] = true;
int num = command.charAt(i-1) - '0';
cnt--;
cnt += num * dfs(command,index+1,visited);
continue;
}
if(ch == ')' && !visited[i]){
visited[i] = true;
return cnt;
}
if(!visited[i]){
visited[i] = true;
cnt++;
}
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
백준 11726번 2Xn타일링 (JAVA) (0) | 2023.09.01 |
---|---|
백준 10917번 Your life (JAVA) (0) | 2023.08.31 |
백준 14677번 병약한 윤호 (JAVA) (0) | 2023.08.29 |
백준 17413번 단어 뒤집기2 (JAVA) (0) | 2023.08.28 |
백준 15270번 친구 팰린드룸 (JAVA) (0) | 2023.08.27 |