From be43cdf5b8c14752ea9d032e7f28bb5939d920ec Mon Sep 17 00:00:00 2001 From: tgyuuAn Date: Sun, 8 Sep 2024 16:17:00 +0900 Subject: [PATCH] 2024-09-06 --- tgyuuAn/README.md | 1 + ...64\354\247\204\355\212\270\353\246\254.py" | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 "tgyuuAn/\355\212\270\353\246\254/\355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254.py" diff --git a/tgyuuAn/README.md b/tgyuuAn/README.md index aea5b0d..b29a2a7 100644 --- a/tgyuuAn/README.md +++ b/tgyuuAn/README.md @@ -79,4 +79,5 @@ | 70차시 | 2024.08.16 | 스택 | 탑 보기 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/232 | 71차시 | 2024.08.20 | 다익스트라 | 다익스트라 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/235 | 72차시 | 2024.08.23 | DFS + 트리 | 등산 마니아 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/238 +| 76차시 | 2024.09.06 | DFS + 트리 | 표현 가능한 이진트리 | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/246 --- diff --git "a/tgyuuAn/\355\212\270\353\246\254/\355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254.py" "b/tgyuuAn/\355\212\270\353\246\254/\355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254.py" new file mode 100644 index 0000000..656cdd6 --- /dev/null +++ "b/tgyuuAn/\355\212\270\353\246\254/\355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254.py" @@ -0,0 +1,32 @@ +def dfs(b, i, depth): + if depth == 0: # 리프 노드에 도달했다면 + return True # 포화이진트리 + + # 부모노드가 '0' 일때 + # 왼쪽 자식 노드가 '1' 이거나 오른쪽 자식 노드가 '1' 이라면 포화 이진트리가 될 수 없음 + elif b[i] == '0': + if b[i - depth] == '1' or b[i + depth] == '1': return False + + # 왼쪽 서브 트리 탐색 + left = dfs(b, i - depth, depth // 2) + # 오른쪽 서브 트리 탐색 + right = dfs(b, i + depth, depth // 2) + return left and right + + +def solution(numbers): + answer = [] + for num in numbers: # num = 42 + b = bin(num)[2:] # b = 101010 / len(b) = 6 + nodes = bin(len(b) + 1)[2:] # nodes = 7 = 111 + + # 포화이진트리가 아닌 경우 더미노드(0추가) + if '1' in nodes[1:]: + dummies = (1 << len(nodes)) - int(nodes, 2) + b = '0' * dummies + b + + # 이미 포화이진트리일 경우 + result = dfs(b, len(b)//2, (len(b)+1)//4) + answer.append(1 if result else 0) + + return answer \ No newline at end of file