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 == 1) return 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 |