취준/프로그래머스

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

puff 2020. 3. 10. 16:43

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

 

코딩테스트 연습 - 종이접기 | 프로그래머스

직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽으로 접습니다. 종이를 모두 접은 후에는 종이를 전부 펼칩니다. 종이를 펼칠 때는 종이를 접은 방법의 역순으로 펼쳐서 처음 놓여있던 때와 같은 상태가 되도록 합니다. 위와 같이 두 번 접은 후 종이를 펼치면 아래 그림과 같이 종이에 접은 흔적이 생기게 됩니다. 위

programmers.co.kr

구현 문제다.

 

종이를 오른쪽으로 반 접으면, 가운데에는 V가 생긴다. 

그리고, 반대쪽에 기존에 접힌 종이의 반대로 접힌 부분이 생긴다.

1 -> V

2 -> V 

3 -> V V ∧  V

4 -> V V  V VV VV V

 

따라서, [0] 에서부터 시작해서

answer = answer + [0] + answer 뒤집고 1의 보수로 변환

실제로 접어봤다.

 

def solution(n):
    answer = [0]
    for i in range(1, n):
        answer = answer + [0] + [(i+1) % 2 for i in reversed(answer)]

    return answer