티스토리 뷰

Algorithm/Solution

[프로그래머스] - 종이접기

기내식은수박바 2020. 3. 19. 15:17
반응형

문제설명

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

  • 먼저 오른쪽 절반을 왼쪽으로 접습니다.

  • 다시 오른쪽 절반을 왼쪽으로 접습니다.

  • 종이를 모두 접은 후에는 종이를 전부 펼칩니다.
    • 종이를 펼칠 때는 종이를 접은 방법의 역순으로 펼쳐서 처음 놓여있던 때와 같은 상태가 되도록 합니다.
    • 위와 같이 두 번 접은 후 종이를 펼치면 아래 그림과 같이 종이에 접은 흔적이 생기게 됩니다.

  • 위 그림에서 ∨ 모양이 생긴 부분은 점선(0)으로, ∧ 모양이 생긴 부분은 실선(1)으로 표시했습니다.
  • 종이를 접은 횟수 n이 매개변수로 주어질 때, 종이를 절반씩 n번 접은 후 모두 펼쳤을 때 생기는 접힌 부분의 모양을 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 종이를 접는 횟수 n은 1 이상 20 이하의 자연수입니다.
  • 종이를 접었다 편 후 생긴 굴곡이 ∨ 모양이면 0, ∧ 모양이면 1로 나타냅니다.
  • 가장 왼쪽의 굴곡 모양부터 순서대로 배열에 담아 return 해주세요.

 

입출력 예

 

입출력 예 설명

  • 입출력 예 #1
    • 종이의 오른쪽 절반을 왼쪽으로 한번 접었다 펴면 아래 그림과 같이 굴곡이 생깁니다.
    • 따라서 [0]을 return 하면 됩니다.

  • 입출력 예 #2
    • 문제의 예시와 같습니다.
  • 입출력 예 #3
    • 종이를 절반씩 세 번 접은 후 다시 펼치면 아래 그림과 같이 굴곡이 생깁니다.
    • 따라서 [0, 0, 1, 0, 0, 1, 1]을 return 하면 됩니다.

 

솔루션

  • 종이접기를 보면 규칙을 발견할 수 있다.
    • 종이 접기의 굴곡 수항상 홀수가 나온다.
    • 여기서 굴곡의 중간 위치 0을 기준으로 양옆 숫자 배열들은 위치와 숫자 반대 대칭 (?) 을 이룬다.
    • 요약하자면 0은 1, 1은 0, 그리고 위치도 정반대이다.
  • 입출력 예 2번과 3번 그림을 통해 확인해보자.

입출력 예 2

입출력 예 3

  • 그림과 같이 반대 대칭 (?) 형태를 이루는 것을 확인해보자.
    • 1번 위치 값은 마지막 위치 (7번) 값과 반대 (0과 1)
    • 2번 위치 값은 마지막 - 1 위치 (6번) 값과 반대 (0, 1)
    • 3번 위치 값은 마지막 -2 위치 (5번) 값과 반대 (1, 0)

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int[] solution(int n) {
    StringBuilder sb = new StringBuilder("0");
 
    while ((--n) > 0) {
        String str = sb.toString();
        
        sb.append(0);
        
        for (int i = str.length() - 1; i >= 0; i--) {
            if (str.charAt(i) == '1')
                sb.append(0);
            else
                sb.append(1);
        }
    }
 
    int[] result = new int[sb.length()];
 
    for (int i = 0; i < result.length; i++)
        result[i] = sb.charAt(i) - '0';
 
    return result;
}
cs

 

결과

반응형

'Algorithm > Solution' 카테고리의 다른 글

[백준 1149] - RGB 거리  (0) 2020.03.18
[백준 9095] - 1, 2, 3 더하기  (0) 2020.03.17
[백준 1003] - 피보나치 함수  (0) 2020.03.17
[프로그래머스] - 정수 삼각형  (0) 2020.03.16
[백준 6497] - 전력난  (0) 2020.03.16
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함