티스토리 뷰

1. 문제

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

 

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

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

programmers.co.kr

 

2. 설명

규칙이

0 ->001

001 -> 0010011

0010011 -> 001001100011011

일단 무조건 홀수다.

그리고 다음으로 갈 때 0 을기준으로 숫자를 뒤집어서(?) 삽입한다.

0이면 1, 1이면 0으로

규칙찾는게 어려웠던 문제

 

3. 코드

import java.util.ArrayList;
class Solution {
    public int[] solution(int n) {
        int[] answer;
        ArrayList<Integer> result = new ArrayList<>();
        folding(n, 0, result);
        answer = result.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
    private void folding(int n, int idx, ArrayList<Integer> result) {
        if(idx==n) return;

        result.add(0);
        for(int i=result.size()-2; i>=0; i--) {
            int num = result.get(i) == 1 ? 0 : 1;
            result.add(num);
        }
        
        folding(n, ++idx, result);
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday