2024. 3. 11. 22:34ㆍDataStructure
#%%
from collections import deque
class Queue:
def __init__(self):
self.buffer = deque()
def enqueue(self,val):
self.buffer.appendleft(val)
def front(self):
return self.buffer[-1]
def dequeue(self):
if len(self.buffer) == 0:
print("Queue is empty.")
return
return self.buffer.pop()
def is_empty(self):
return len(self.buffer) == 0
def size(self):
return len(self.buffer)
#%%
def print_binary(n):
queue = Queue()
queue.enqueue("1")
for i in range(n):
front = queue.front()
queue.enqueue(front + "0")
queue.enqueue(front + "1")
print(queue.dequeue())
if __name__ == "__main__":
print_binary(10)
Queue를 이용하여, 1부터 10까지의 수를 binary number로 변환하는 exercise가 있었다.
이때, binary number에는 규칙성이 있다. 1부터 10까지를 binary number로 표현해 보면 다음과 같다.
1,10,11,100,101,110,111,1000,1001,1010
설명을 해보면, 1 ----> 1+0 ----> 1+1 ----> 1+0+0 ----> 1+0+1 ----> 1+1+0 ----> 1+1+1 ---->과 같이 정의된다.
즉, 앞에 있는 숫자에 0 또는 1을 붙여 다음번째 수를 만든다. 1에서 10과 11을 만들고, 10은 100과 101을 만든다. 11은 110과 111을 만드는 방식이다.
나의 문제점은 Queue에 모든 숫자를 한 번에 담으려고 했던 것이다. 즉, 모든 경우의 수를 생각하고 문제를 풀려고 하니, 막힐 수밖에 없었다.
내가 부족했던 부분은 1을 출력하고, 10부터 다시 시작해서 100,101을 만들고, 10을 출력하는 형식으로 구현하는 부분이 부족했다. 앞으로는 문제를 아주 잘게 쪼개서 보는 습관을 길러야겠다.
###### Gemini를 이용해 고급스럽게 표현하기
이진수 변환 탐구: 재귀적 사고와 큐의 조화
1. 문제 상황 및 해결 방안
1부터 10까지의 숫자를 이진수로 변환하는 문제는 단순히 숫자를 변환하는 작업을 넘어 재귀적 사고와 큐 자료구조 활용 능력을 시험하는 흥미로운 탐구입니다. 문제 해결의 핵심은 모든 경우의 수를 미리 예측하는 것이 아니라 재귀적 패턴을 인식하고 큐를 통해 효율적으로 구현하는 것입니다.
2. 재귀적 패턴 분석 및 큐 활용 전략
문제에서 제시된 규칙을 분석하면 다음과 같은 재귀적 패턴을 발견할 수 있습니다.
- 단계 1: 1을 출력합니다.
- 단계 2: 이전 단계에서 출력된 숫자에 0 또는 1을 붙여 두 개의 새로운 숫자를 생성합니다.
- 단계 3: 생성된 두 개의 숫자를 큐에 삽입합니다.
- 단계 4: 큐가 비어질 때까지 단계 2와 3을 반복합니다.
큐는 이진수 변환 과정에서 생성된 숫자를 효율적으로 관리하는 역할을 합니다. 큐의 선입선출(FIFO) 특성을 활용하여 생성된 순서대로 숫자를 처리하고 다음 단계에 필요한 숫자를 제공합니다.
3. 문제 해결 과정 개선
이전 접근 방식은 모든 경우의 수를 미리 계산하려는 비효율적인 방식이었습니다. 개선된 접근 방식은 다음과 같습니다.
- 1단계: 1을 큐에 삽입합니다.
- 2단계: 큐에서 숫자를 하나씩 꺼냅니다.
- 3단계: 꺼낸 숫자를 출력합니다.
- 4단계: 꺼낸 숫자에 0과 1을 붙여 두 개의 새로운 숫자를 생성합니다.
- 5단계: 생성된 두 개의 숫자를 큐에 삽입합니다.
- 6단계: 큐가 비어지지 않을 때까지 2단계부터 5단계를 반복합니다.
이 접근 방식은 재귀적 패턴을 명확하게 구현하고 큐를 통해 효율적으로 관리하여 문제를 해결합니다.
'DataStructure' 카테고리의 다른 글
[Data Structure] Graph (1) | 2024.03.23 |
---|---|
[Data Structure] Binary Tree (0) | 2024.03.23 |
[Data Structure] General Tree (1) | 2024.03.23 |