โ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/150367
๐๏ธ ํ์ด ๊ณผ์
๋ ๊ฐ์ง์ ๊ณผ์ ์ด ํ์ํ๋ค.
1. ํฌํ ์ด์ง ํธ๋ฆฌ ๋ง๋ค๊ธฐ
2. ๋ถ๋ชจ, ์์ ๊ด๊ณ ์ฌ๊ท์ ์ผ๋ก ํ์ธํ๊ธฐ
ํฌํ ์ด์งํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ 2^n - 1๊ผด์ ์๋ฆฟ์๋ฅผ ๊ฐ์ ธ์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ธํ ๋ฆฌ์คํธ(num)์ ํด๋น ๋ฆฌ์คํธ์ ๋ถ๋ชจ(parent)๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์ธํ๋ค.
ํด๋น ๋ฆฌ์คํธ์ ๊ฐ์ฅ ํ๋ ธ๋(child)๋ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ธ ๋ถ๋ชจ(parent)์ ์์์ด๋ค.
๋ฐ๋ผ์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ child๋ฅผ ํ์ธํด์ parent์ ๋น๊ตํ๋ค.
๋ ๊ฐ์ง์ ๊ณผ์ ์ด ํ์ํ๋ค๋ ๊ฒ๊น์ง ํ์ธํ์ง๋ง,
๊ตฌํ์ ์ด๋ ค์์ ๋๊ปด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๋ค.
๐ป ํ์ด
import math
def is_tree(num, parent):
if num:
mid = len(num) // 2
# ์์์ด ์๋์ง ์๋์ง ํ์ธ
child = num[mid] == "1"
else:
return 1
if child and not parent:
return 0
else:
return is_tree(num[:mid], child) and is_tree(num[mid+1:], child)
def check(num):
if num == 1: return 1
# 2์ง์ ๋ณํ
b_num = bin(num)[2:]
# 2^n - 1๊ผด์ ์๋ฆฟ์๋ฅผ ๊ฐ์ ธ์ผํจ.
digit = 2 ** (int(math.log(len(b_num), 2)) + 1) - 1
b_num = "0" * (digit - len(b_num)) + b_num
# ์์์ด ์๋ ๋ถ๋ชจ๊ฐ 0์ด ์๋์ง ํ์ธ
if b_num[len(b_num) // 2] == "0":
return 0
else:
return is_tree(b_num, 1)
def solution(numbers):
answer = []
for num in numbers:
answer.append(check(num))
return answer
print(solution([63, 111, 95, 1, 0]))
'Algorithm | Language > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers/Lv.3] ์ธ์ฌ๊ณ ๊ณผ (0) | 2023.06.12 |
---|---|
[programmers/Lv.2] ๋ฆฌ์ฝ์ณ ๋ก๋ด (1) | 2023.06.05 |
[programmers/Lv.2] ๋ ํ ํฉ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ (0) | 2023.03.10 |
[programmers/Lv.2] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (1) | 2023.03.10 |
[programmers/Lv.2] ํผ์์ ํ๋ ํฑํํ (1) | 2023.03.06 |