Algorithm

알고리즘 - 종이접기 LV3

Nanamare 2020. 5. 28. 23:39
728x90

https://programmers.co.kr/learn/courses/30/lessons/62049

 

코딩테스트 연습 - 종이접기

직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽��

programmers.co.kr

import java.util.Arrays;

public class Programmers1 {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(solution(19)));
    }

    public static int[] solution(int n) {
        return getAnswer(n, 1, new int[]{0});
    }

    public static int[] getAnswer(int n, int loop, int[] value) {
        if (loop != n) {
            int[] array = new int[value.length * 2 + 1];
            for (int i = 0; i < value.length; i++) {
                array[i] = value[i];
                array[array.length - 1 - i] = value[i] == 0 ? 1 : 0;
            }
            array[value.length] = 0;
            return getAnswer(n, ++loop, array);
        } else {
            return value;
        }
    }

}

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

 

n이 20이하여서 괜찮지만 30만 넘어가도 메소드 스택이 많이 쌓이게 되서 위험하니, 꼬리재귀로 바꾸는 것도 좋아보인다

728x90