[문제풀이] 종이접기
업데이트:
문제 링크 : 종이접기
풀이 시간 : 20분
1. 문제 풀이
규칙을 찾으면 간단한 문제
반으로 접을 때마다 기존의 접힌 구간(0 or 1) 사이에
0과 1을 번갈아 넣어주면 된다.
ex)
1번 0
2번 0 0 1
3번 0 0 1 0 0 1 1
4번 0 0 1 0 0 1 1 0 0 0 1 1 0 1 1
2. 소스 코드
static public int[] solution(int n) {
// 한번 접을 때마다 두배씩 증가
int size = (int) Math.pow(2, n);
int[] answer = new int[size - 1];
// 0과 1을 넣어야 하므로 초기값은 -1로 세팅
for (int i = 0; i < answer.length; i++) {
answer[i] = -1;
}
// 처음에는 두칸씩 증가하면서 0과 1을 넣어준다
int pivot = 2;
for (int i = 0; i < size / 2; i++) {
if (answer[i] == -1) {
int num =0;
for (int j = i; j < answer.length; j=j+pivot) {
answer[j] = num;
num = Math.abs(num-1);
}
// 간격을 점차 늘린다.
pivot *=2;
}
}
return answer;
}
3. 후기
규칙을 찾지 못하면 풀 수 없는 문제인듯 하다
규칙을 금방 찾아서 특별한 알고리즘 없이 쉽게 풀었다.