smooth waters run deep

1d-1c/BOJ

[변형 문제] 백준 1662_압축

yeon_11 2020. 10. 26. 00:37

 ** 변형 문제

 

예시1) 입력 : 3(A2(BC))

         출력 : ABCBCABCBCABCBC

 

예시2) 입력 : 2(ABC)

         출력 : ABCABC

 

 

import java.util.Scanner;
import java.util.Stack;

import static java.lang.Character.isDigit;

public class Main {
	static String S;
	static int[] garo;
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		S = sc.next();

		Stack<Integer> stack = new Stack<>();
		garo = new int[S.length()];
		for(int i=0; i<S.length(); i++){
			if(S.charAt(i)=='(')
				stack.push(i);
			if(S.charAt(i)==')'){
				int start = stack.peek();
				stack.pop();
				garo[start] = i;
			}
		}
		System.out.println(cal(0,S.length()));
	}
	private static String cal(int start, int end){
		String ans = "";

		for(int i=start; i<end; i++){
			if(S.charAt(i)=='('){
				int num = S.charAt(i-1)-'0';
				for(int j=0; j<num; j++){
					ans += cal(i+1, garo[i]);
				}
				i = garo[i];
			}
			else{
				if(!isDigit(S.charAt(i)))
					ans += S.charAt(i);
			}
		}
		return ans;
	}
}

 

백준 1662번과 똑같이 풀었다. 아래 참고!

 

[백준] 1662_압축 (Gold1) (JAVA)

import java.util.Scanner; import java.util.Stack; public class Main { static String S; static Stack stack = new Stack<>(); static int[] close; public static void main(String[] args){ Scanner sc = ne..

yeone2ee.tistory.com

다른게 있다면,

반복하는 숫자는 출력에 포함이 안되기 때문에 - isDigit()을 이용하여 걸러냈다.

 ** is.Digit(char) : true리턴=숫자, false리턴=문자

 

 

'1d-1c > BOJ' 카테고리의 다른 글

2304_창고 다각형 (JAVA)  (0) 2020.10.27
1152_단어의 개수 (JAVA)  (0) 2020.10.26
1662_압축 (JAVA)  (0) 2020.10.26
2606_바이러스 (JAVA)  (0) 2020.10.23
1697_숨바꼭질 (JAVA)  (0) 2020.10.23