[Programmers] 종이접기 - Summer/Winter Coding(2019)

동민·2021년 3월 11일
// 종이접기 - Summer/Winter Coding(2019)
public class FoldPaper {
	/*
	 * 	1	-	0
	 * 	2	-	0 0 1
	 *  3	-	001	1 011
	 *  4	-	0011011 0 0010011
	 *  5	-	001101100010011	0 001101110010011		
	 *  
	 *  -> 종이 접는 원리를 생각할 때, n번째 값은 가운데 0을 기준으로 n-1번째 값을 거꾸로 뒤집어서 0->1 , 1->0 으로 바꾼 값을 합친 값이다.  													
	 */
	public int[] solution(int n) {

		StringBuilder sb = new StringBuilder("0");
		for (int i = 1; i < n; i++) {
			sb = new StringBuilder(sb.toString() + "0" + convertStr(sb.toString()));
		}

		int[] answer = new int[sb.length()];
		for (int i = 0; i < answer.length; i++) {
			answer[i] = Integer.parseInt(sb.charAt(i) + "");
		}
		return answer;
	}

	private String convertStr(String str) {	// 스트링을 거꾸로 뒤집고 0->1, 1->0 으로 바꾸는 함수
		StringBuilder sb = new StringBuilder(str).reverse();
		sb = new StringBuilder(sb.toString().replaceAll("1", "t"));
		sb = new StringBuilder(sb.toString().replaceAll("0", "1"));
		sb = new StringBuilder(sb.toString().replaceAll("t", "0"));
		return sb.toString();
	}
}
profile
BE Developer

0개의 댓글