양자컴퓨터를 일상 생활에서 써보기 위해 쉬운 실험을 한 번 해보겠습니다. 점심 메뉴를 정하지 못해 고민했던 경험은 누구나 한 번쯤 있을텐데요. 양자 중첩과 측정이라는 개념을 Qiskit실험을 통해 점심메뉴를 결정하는데 적용해보겠습니다.

앞선 실험에서는 양자회로로 가위바위보를 선택해봤습니다. 당시에는 큐비트 2개에서 나오는 00, 01, 10, 11 네 가지 결과를 세 가지 선택지에 맞춰야 했기 때문에 11을 버리고 다시 뽑는 과정이 필요했습니다.
그렇다면 선택지가 처음부터 네 개라면 어떨까요? 이번에는 제가 점심시간에 자주 고민하는 네 가지 메뉴를 준비하고, 두 개의 큐비트가 어떤 메뉴를 고르는지 직접 확인해보겠습니다.
1. 점심 메뉴 선택을 양자회로에 맡겨본 이유
“오늘 뭐 먹지?”라는 질문은 사소해 보이지만 선택지가 비슷할수록 의외로 결정하기 어렵습니다. 제육덮밥도 괜찮고, 짜장면도 먹고 싶고, 돈가스도 나쁘지 않은데 김치찌개까지 생각나면 오히려 결정을 미루게 됩니다.
보통은 다른 사람에게 하나를 골라달라고 하거나 스마트폰의 랜덤 뽑기 기능을 사용할 수 있습니다. 이번 실험에서는 이 역할을 간단한 양자회로에 맡겨보기로 했습니다.
다만 먼저 구분해야 할 점이 있습니다. 이 실험은 양자컴퓨터가 음식 취향이나 영양 정보를 분석해 최적의 메뉴를 추천하는 실험이 아닙니다. 미리 정해둔 네 가지 후보 중 하나를 같은 확률로 선택하는 무작위 선택 실험입니다.
그래서 실험의 핵심은 메뉴 자체보다 큐비트의 중첩과 측정 결과를 실제 선택 문제에 어떻게 연결할 수 있는지를 이해하는 데 있습니다.
2. 2개의 큐비트면 왜 메뉴 4개를 고를 수 있을까?

큐비트 하나를 계산 기저에서 측정하면 0 또는 1이라는 두 가지 결과를 얻을 수 있습니다.
큐비트를 두 개 사용하면 가능한 조합은 다음 네 가지로 늘어납니다.
00011011
두 큐비트가 모두 처음에 |0⟩ 상태에 있다고 생각해보겠습니다. 여기에 각각 Hadamard Gate를 적용하면 한 큐비트는 이상적인 조건에서 0과 1을 각각 같은 확률로 측정할 수 있는 상태가 됩니다.
|00⟩ ↓ H ⊗ H ↓ 1/2 (|00⟩ + |01⟩ + |10⟩ + |11⟩)
따라서 이상적인 회로에서는 네 결과의 측정확률이 각각 25%가 됩니다.
| 측정 결과 | 이론적 확률 |
|---|---|
| 00 | 25% |
| 01 | 25% |
| 10 | 25% |
| 11 | 25% |
이 블로그의 단일 큐비트 게이트가 어떻게 작동하는지 설명한 글에서는 Hadamard Gate가 어떤 방식으로 중첩 상태를 만드는지 조금 더 자세히 살펴봤습니다. 이번에는 그 원리를 두 개의 큐비트에 동시에 적용합니다.
3. 네 가지 비트 결과를 네 가지 점심 메뉴에 연결했다

오늘 후보로 정한 메뉴는 다음 네 가지입니다.
- 제육덮밥
- 짜장면
- 돈가스
- 김치찌개
그리고 양자회로의 네 가지 측정 결과를 메뉴와 1대1로 연결했습니다.
| 양자 측정 결과 | 점심 메뉴 | 이론적 선택확률 |
|---|---|---|
| 00 | 제육덮밥 | 25% |
| 01 | 짜장면 | 25% |
| 10 | 돈가스 | 25% |
| 11 | 김치찌개 | 25% |
앞서 진행했던 양자컴퓨터 가위바위보 실험과 가장 크게 달라지는 부분입니다.
가위바위보에는 선택지가 세 개밖에 없어 11이 나오면 그 결과를 버려야 했습니다. 하지만 이번에는 선택지가 정확히 네 개입니다. 따라서 00부터 11까지 모든 결과를 그대로 사용할 수 있습니다.
메뉴를 바꾸고 싶다면 회로를 수정할 필요도 없습니다. 측정 결과와 메뉴를 연결하는 코드만 바꾸면 됩니다. 예를 들어 냉면, 초밥, 햄버거, 샐러드를 후보로 만들고 싶다면 네 개의 메뉴 이름만 변경하면 됩니다.
4. Qiskit으로 점심 메뉴 뽑기 회로를 만들어봤다
이번 실험에서는 실제 양자 하드웨어가 아니라 Qiskit의 StatevectorSampler를 이용했습니다. 실제 장비의 노이즈를 비교하는 것이 아니라 이상적인 양자회로에서 네 상태가 어떻게 측정되는지를 확인하는 것이 목적이기 때문입니다.
- 사용 큐비트: 2개
- 사용 게이트: Hadamard Gate 2개
- 가능한 측정 결과: 00, 01, 10, 11
- 메뉴 후보: 4개
- 단일 메뉴 선택: 1 Shot
- 분포 확인: 10,000 Shots
- 실행환경: Qiskit StatevectorSampler
실험에 사용한 전체 코드는 다음과 같습니다.
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
from collections import Counter
import matplotlib.pyplot as plt
# 1. 2큐비트 회로 생성
qc = QuantumCircuit(2)
# 2. 두 큐비트에 Hadamard Gate 적용
qc.h(0)
qc.h(1)
# 3. 두 큐비트 측정
qc.measure_all()
# 4. 비트 결과와 점심 메뉴 연결
menu_map = {
"00": "제육덮밥",
"01": "짜장면",
"10": "돈가스",
"11": "김치찌개"
}
# 5. StatevectorSampler 준비
sampler = StatevectorSampler()
# --------------------------------
# 오늘의 점심 메뉴 한 번 선택
# --------------------------------
one_result = sampler.run(
[qc],
shots=1
).result()
one_bit = one_result[0].data.meas.get_bitstrings()[0]
selected_menu = menu_map[one_bit]
print("측정 결과:", one_bit)
print("오늘의 점심:", selected_menu)
# --------------------------------
# 네 메뉴가 공평한지 10,000회 확인
# --------------------------------
test_shots = 10000
test_result = sampler.run(
[qc],
shots=test_shots
).result()
bitstrings = test_result[0].data.meas.get_bitstrings()
menu_results = [
menu_map[bits]
for bits in bitstrings
]
menu_counts = Counter(menu_results)
print()
print("=== 10,000회 메뉴 선택 결과 ===")
for menu in menu_map.values():
count = menu_counts[menu]
percent = count / test_shots * 100
print(
f"{menu}: {count}회 "
f"({percent:.2f}%)"
)
# --------------------------------
# 결과 그래프 생성
# --------------------------------
labels = list(menu_map.values())
values = [menu_counts[menu] for menu in labels]
plt.figure(figsize=(8, 5))
plt.bar(labels, values)
plt.axhline(
test_shots / 4,
linestyle="--",
label="이론적 기대값 2,500회"
)
plt.ylabel("선택 횟수")
plt.title("Quantum Lunch Menu - 10,000 Shots")
plt.legend()
plt.tight_layout()
plt.savefig(
"quantum-lunch-menu-10000-results.png",
dpi=150
)
plt.show()
실제 양자회로 부분만 보면 코드는 매우 짧습니다.
qc.h(0)
qc.h(1)
qc.measure_all()
두 개의 Hadamard Gate가 각각의 큐비트를 중첩 상태로 만들고, 마지막 측정에서 두 개의 고전적인 비트 결과를 얻습니다. 이후 어떤 비트열을 어떤 음식으로 볼지는 일반적인 Python 코드가 처리합니다.
5. 양자회로가 고른 오늘의 점심은 무엇이었을까?
이제 가장 궁금했던 부분입니다. 동일한 회로를 단 한 번 측정했습니다.이번 실행에서는 00이 나왔고, 제가 미리 정해둔 메뉴표에 따라 오늘의 점심은 제육볶음으로 결정됐습니다.
물론 이 결과 하나만 보고 네 메뉴가 정말 똑같은 확률로 선택된다고 판단할 수는 없습니다. 한 번의 측정에서는 네 가지 결과 중 하나만 보이기 때문입니다.
그래서 이번에도 회로를 여러 번 반복해서 전체 분포를 확인해봤습니다.
6. 10,000번 반복하면 네 메뉴는 정말 25%에 가까울까?
두 큐비트에 각각 Hadamard Gate를 적용한 이상적인 회로라면 00, 01, 10, 11의 이론적인 측정확률은 각각 25%입니다.

따라서 회로를 10,000번 측정한다면 각 메뉴의 이론적 기대값은 약 2,500회입니다. 실제 프로그램을 실행한 결과를 아래 표에 입력하면 이론적인 확률과 비교해볼 수 있습니다.
| 비트 | 메뉴 | 실제 횟수 | 실제 비율 | 이론적 확률 |
|---|---|---|---|---|
| 00 | 제육덮밥 | 2,514회 | 25.14% | 25% |
| 01 | 짜장면 | 2,489회 | 24.89% | 25% |
| 10 | 돈가스 | 2,586회 | 25.86% | 25% |
| 11 | 김치찌개 | 2,411회 | 24.11% | 25% |
여기서 중요한 것은 네 결과가 정확히 2,500번씩 나오는지가 아닙니다.
각 메뉴의 측정확률이 25%라고 해서 10,000번 실행할 때 결과가 반드시 정확히 2,500회씩 나뉘는 것은 아닙니다. 실제 표본에서는 확률적인 흔들림이 생길 수 있습니다.
양자회로의 반복 실행 횟수와 결과 분포의 관계는 양자컴퓨팅에서 Shots가 중요한 이유에서도 살펴봤습니다. 이번에는 그 개념을 점심 메뉴라는 익숙한 상황에 적용해본 셈입니다.
7. 가위바위보 실험보다 이번 회로가 오히려 더 단순했다
이번 실험은 바로 앞에서 진행했던 가위바위보 실험과 비교하면 차이가 더 분명하게 보입니다.
| 구분 | 가위바위보 실험 | 점심 메뉴 실험 |
|---|---|---|
| 큐비트 | 2개 | 2개 |
| 가능한 비트 결과 | 4개 | 4개 |
| 필요한 선택지 | 3개 | 4개 |
| 남는 비트 결과 | 11 | 없음 |
| 결과 폐기 | 필요 | 불필요 |
| 각 선택의 목표 확률 | 약 33.33% | 25% |
양자컴퓨터에서는 결과를 만들어내는 것만큼 그 결과를 실제 문제에 어떻게 대응시키는지도 중요합니다.
특히 이진수로 표현되는 상태의 수는 큐비트가 하나 늘어날 때마다 2배씩 증가합니다. 큐비트 1개는 2가지, 2개는 4가지, 3개는 8가지 계산기저 상태를 가집니다.
그래서 이번처럼 선택지가 정확히 4개라면 두 큐비트의 네 결과와 자연스럽게 1대1로 연결할 수 있습니다.
8. 점심 메뉴 고르기가 보여준 일상 속 양자 원리
물론 점심 메뉴 하나를 고르기 위해 실제 양자컴퓨터를 사용할 필요는 없습니다. 스마트폰이나 일반 컴퓨터의 난수 기능만으로도 충분히 비슷한 일을 할 수 있습니다.
그럼에도 이런 실험을 해보는 이유는 양자컴퓨팅에서 배운 개념을 생활 속 문제와 연결해서 볼 수 있기 때문입니다.
- Hadamard Gate를 이용해 여러 측정 가능성을 갖는 상태를 만든다.
- 두 큐비트를 사용하면 네 가지 계산기저 결과를 얻을 수 있다.
- 측정하면 그중 하나의 고전적인 비트열을 얻게 된다.
- 그 결과를 실제 메뉴와 연결하는 과정은 고전적인 프로그램이 담당한다.
- 한 번의 결과보다 반복 측정한 분포를 통해 확률적 특성을 확인할 수 있다.
여기에서 또 하나 주의할 점이 있습니다. 이번 실험에 사용한 StatevectorSampler는 실제 QPU를 측정한 것이 아니라 이상적인 양자상태를 계산하고 그 측정 분포를 샘플링하는 시뮬레이션 환경입니다.
따라서 이 글의 의미는 “양자컴퓨터가 오늘 먹어야 할 최고의 메뉴를 알아냈다”는 것이 아닙니다. 두 큐비트의 중첩과 측정이라는 추상적인 개념을 우리가 매일 경험하는 선택 문제로 바꾸어 직접 관찰해봤다는 데 있습니다.
동전 던지기에서는 하나의 큐비트로 두 가지 결과를 만들었고, 가위바위보에서는 두 큐비트의 네 결과를 세 선택지에 맞추기 위해 하나를 버렸습니다. 이번에는 네 가지 상태를 네 가지 메뉴에 그대로 연결했습니다.
이렇게 실험을 하나씩 확장하다 보면 큐비트의 수와 가능한 상태 수, 측정, 확률, 고전적인 후처리가 실제 양자 프로그램 안에서 어떤 관계를 갖는지도 조금씩 자연스럽게 이해할 수 있습니다.
9. 참고문헌
- IBM Quantum Learning – Superposition with Qiskit
- IBM Quantum Learning – Quantum mechanics basics
- IBM Quantum Learning – Bits, gates, and circuits
- IBM Quantum Learning – Build and run your first quantum program
- IBM Quantum Learning – Grover’s algorithm, Hadamard layer and uniform superposition 설명
관련 실험: 양자컴퓨터로 동전 던지기 10,000번 실험 → 양자컴퓨터로 가위바위보 10,000번 실험 → 이번 점심 메뉴 4개 선택 실험 순서로 보면 큐비트 측정 결과를 실제 선택지에 연결하는 과정을 단계적으로 이해하기 쉽습니다.