규칙을 찾아서 풀었씀니다.
class Solution {
public int[] solution(int n) {
if (n == 1) {
int[] ret = { 0 };
return ret;
}
int[] b = solution(n - 1);
int[] a = new int[b.length * 2 + 1];
System.arraycopy(b, 0, a, 0, b.length);
a[b.length] = 0;
int[] c = new int[b.length];
for (int i = 0; i < c.length; i++) {
if (b[b.length - 1 - i] == 1) c[i] = 0;
else c[i] = 1;
}
System.arraycopy(c, 0, a, b.length + 1, c.length);
return a;
}
}
b
: n-1일 때 정답이 들어갈 배열a
: n일 때 정답이 들어갈 배열. n-1일 때의 길이 * 2 + 1.c
: b
배열을 반대로 뒤집었을 때 나오는 배열
n = 1 ❯ [0]
n = 2 ❯ [0 0 1]
n = 3 ❯ [0 0 1 0 0 1 1]
n = 4 ❯ [0 0 1 0 0 1 1 0 0 0 1 1 0 1 1]
...
n = i ❯ [i-1 0 ~(i-1)]
반으로 더 접었을 때, 중간에 0이 생기고 그 뒤에는 i-1의 역순이 됩니다.
0 0 1 0 0 1 1 -> 0 0 1 1 0 1 1
이런 규칙이 나오지여.
따라서 b
를 이용해서 c
를 구해주고 이를 a
뒤에다가 넣어주면 끝!
감사합니다!
'Algorithm > Programmers' 카테고리의 다른 글
[2020 KAKAO BLIND RECRUITMENT][시뮬레이션/완전 탐색] 자물쇠와 열쇠 - Java (0) | 2020.08.25 |
---|---|
[2020 KAKAO BLIND RECRUITMENT][문자열 처리] 괄호 변환 - Java (0) | 2020.08.24 |
[2020 KAKAO BLIND RECRUITMENT][문자열 처리] 문자열 압축 - Java (0) | 2020.08.24 |
[2018 KAKAO BLIND RECRUITMENT][문자열 처리] [1차] 비밀지도 - Java (0) | 2020.08.15 |
[2017 카카오코드 예선][BFS] 카카오프렌즈 컬러링북 - Java (0) | 2020.08.15 |