이번 문제는 완전탐색에 대한 문제입니다.
일단 포화 이진 트리로 만들고, 탐색을 시작합니다.
루트노드부터 시작해서 제일 왼쪽 리프노트의 부모노드까지 내려옵니다. 이 서브트리가 올바른 트리인 지 확인합니다.
어려운 점은 자식노드나 부모노드 간의 이동이 어려웠습니다.
from collections import deque
import itertools
import math
flag = True
def solution(numbers):
answer = []
for i in numbers:
if i == 1:
answer.append(1)
else:
an = ans(dec_to_bin(i))
if an == -1:
an =0
answer.append(an)
return answer
def dec_to_bin(number):
ret = deque()
while number!= 1:
ret.appendleft(number%2)
number = number // 2
ret.appendleft(1)
n = int(math.log2(len(ret))) + 1
while 2**n-1 != len(ret):
ret.appendleft(0)
return ret
def ans(number):
n = int(math.log2(len(number)))
mid = len(number)//2
return search(mid, number, n)
def search(idx, number, level):
if (idx+1)%2 == 1:
return number[idx]
left = idx - 2**(level-1)
right = idx + 2**(level-1)
l = search(left, number, level-1)
r = search(right, number, level-1)
if l == -1 or r == -1:
return -1
if number[idx] == 0:
if l == 0 and r == 0:
return 0
else:
return -1
else:
return 1
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 블록 이동하기 (0) | 2023.03.07 |
---|---|
[프로그래머스] 표 병합 (0) | 2023.02.16 |
[다익스트라] 백준 9370 (0) | 2023.01.29 |
[다익스트라] 백준 레이저 통신 (0) | 2022.12.25 |
[프로그래머스] 양과 늑대 (0) | 2022.08.20 |