Algorithm/Programmers

[Programmers] 종이접기

goakgoak 2020. 4. 23. 17:51

[Level 3] 종이접기

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

  • 종이를 n번 접은 후 모두 펼쳤을 때 생기는 접힌 부분의 모양을 배열에 담아 return 하도록 solution 함수를 완성하시오

 

Solution

  • 첫번째 생각했던 방법은 리스트 중간 중간 값을 추가하는 방법 = 시간초과
  • 가운데 접힌 모양을 기준으로 대칭인 점을 고려하여 풀었다.
  • 푸는데 시간이 너무 오래 걸림 .. ㅠ ㅠ

 

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.IOException;
import java.util.LinkedList;
 
public class Solution {
    static int[] answer;
    
    static int[] solution(int n) {
        if(n == 1return answer = new int[] {0};
        String result = "";
        for(int i = 1; i<=n;i++) {
            result = fold(i,result);
        }
        answer = new int[result.length()];
        
        for(int i = 0; i<result.length(); i++) {
            answer[i] = result.charAt(i)-'0';
        }
        
        return answer;
    }
    
    static String fold(int cnt, String s) {
        StringBuilder sb = new StringBuilder(s);
        if(cnt == 1) {
            sb.append("0");
        }else{
            sb.append("0");
            String[] temp = s.split("");
            for(int i = temp.length-1; i>= 0; i--) {
                if(temp[i].equals("0")) sb.append("1");
                else sb.append("0");
            }
        }
        return sb.toString();
    }
}
cs