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

IT공부중·2020년 4월 9일
0

알고리즘

목록 보기
13/49

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

def reverse(lists):
    return [bit ^ 1 for bit in lists[::-1]]

def solution(n):
    answer = [0]
    if (n > 1):
        for i in range(2, n + 1):
            answer = answer + [0] + reverse(answer)
    return answer

종이를 한 방향으로 접는다. 아래쪽으로 접히면 0이고 위쪽으로 접히면 1이다.
1번 접었을 땐 [0] 이 되고
2번 접었을 땐 [0,0,1] 이 되고
3번 접었을 땐 [0,0,1,0,0,1,1]이 된다.
이만큼만 봤을 때는 아직 잘 모르겠어서, 실제로 종이를 한번 접어봤다.

4번을 접으니깐 [0,0,1,0,0,1,1,0,0,0,1,1,0,1,1]이 됐다. 이제 규칙이 어느정도 보였다. 한 번 접을 때마다 그 전 배열에 0을 추가하고 그 전 배열을 거꾸로 한다음 0 은 1로 1은 0으로 바꾸면 된다.

0을 1로 바꾸기 위해 xor 연산자를 사용하여 bit ^ 1을 하여 bit가 1이면 같으니깐 0이 되고 bit가 0이면 0, 1 이니 다르니깐 1이 돼서 반전이 된다.

profile
3년차 프론트엔드 개발자 문건우입니다.

0개의 댓글