코드굽는 타자기

Programmers[62049] - 종이접기[Level3] 본문

알고리즘/수학

Programmers[62049] - 종이접기[Level3]

bright-jun 2020. 4. 29. 15:05

링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제설명

  • 종이접기 : 안으로접히면0 밖으로접히면1

문제풀이

  • 규칙성 찾기

N=2로 N=3을 만들 경우

  • sol(n) = sol(n-1) + 0 + sol(n-1)_180도 회전

문제코드

public class Solution {
    public static int[] solution(int n) {
        int[] answer;
        if(n==1) return new int[] {0};  
        else {
            int[] before = solution(n-1);
            answer = new int[2*before.length + 1];

            for (int i = 0; i < before.length; i++) {
                answer[i] = before[i];
            }
            answer[before.length]=0;
            for (int i = 0; i < before.length; i++) {
                answer[2*before.length+1-1-i] = before[i]==0?1:0;
            }            
        }
        return answer;
    }
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Arrays.toString(solution(i)));
        }
    }
}

아쉬운점

  • Arrays.CopyRange써보려했으나 특정 범위에 다른 어레이의 특정 범위값을 저장하는 메서드는 없었다.

잘한점

  • O(N) = 2^20 = 10^6
    • int[1000000]을 만드는데에도 별 무리 없는듯

'알고리즘 > 수학' 카테고리의 다른 글

Programmers[62048] - 멀쩡한 사각형[Level2]  (0) 2020.04.29
Comments