โ“  ๋ฌธ์ œ

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]))

 

+ Recent posts