카드마술 프로그램
기본적인 정보이론 분야의 실습 프로그램. $N$ 개의 정보를 분류하기 위해서는 최대 $\log_{2}{N}$개의 질문이 필요하다는 간단하고 기초적인 엔트로피 개념을 적용한 실습인데, 마술이라는 거창한 타이틀이 달려있다.
모르고 봤으면 신기했을려나...?
def trans_num(n: int, item: int) -> str:
bin_str = bin(item)[2:]
bin_str = '0' * (n - len(bin_str)) + bin_str
return bin_str[::-1]
def make_deck(n: int) -> list[list[int]]:
deck = [[] for _ in range(n)]
arr = [i for i in range(2**n)]
for item in arr:
bin_str = trans_num(n, item)
for i in range(n):
if bin_str[i] == '1':
deck[i].append(item)
return deck
def show_card(n: int, deck: list[list[int]]) -> None:
for i in range(n):
print(f"CARD {i+1}:", deck[i])
ans = ""
n = int(input("사용할 카드 장수: "))
deck = make_deck(n)
show_card(n, deck)
print(f"마음 속으로 1부터 {2**n-1}까지 임의의 숫자를 생각하세요.")
for i in range(n):
choice = input(f"생각한 카드가 {i+1}번째 카드에 있습니까?(Y/N): ")
if choice == 'Y' or choice == 'y':
ans += '1'
elif choice == 'N' or choice == 'n':
ans += '0'
else:
print("잘못 입력하셨습니다.")
i -= 1
ans = int(ans[::-1], 2)
print(f"당신이 생각한 숫자는 {ans}입니다!")
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[방학의 PS] 그리디 알고리즘 - BOJ_1931, BOJ_1541 (0) | 2022.07.02 |
---|---|
[방학의 PS] 다이나믹 프로그래밍 2 - BOJ_1003 (0) | 2022.06.16 |
[방학의 PS] DFS와 BFS - BOJ_2606 (0) | 2022.06.15 |
[방학의 PS] set, deque, 리스트의 참조 복사 (0) | 2022.06.15 |
[방학의 PS] 다이나믹 프로그래밍(DP) - BOJ_1463 (0) | 2022.06.15 |