- 세상의 모든 계산기 수학, 과학, 공학 이야기 확률통계 ()
게임에서 가챠 아이템을 뽑을 확률은?

총 10개의 아이템이 있고, 두 부류로 구분 됨.
A형 5종 : 각 12% 의 확률로 선택됨
B형 5종 : 각 8% 의 확률로 선택됨
합계 100%로
10개 상품이 온전히 있을 때 그 중 1개 뽑을 때의 확률을 의미함.
실제로는
아이템 구매시 2개의 아이템이 선택되어 나오고,
동일한 아이템이 한꺼번에 나오지는 않음.
B형 아이템 중 특정한 아이템인 B1이 나올 확률은?

B1을 획득할 확률
= A상품 후 B1을 뽑는 확률 + B1아닌 B상품 후 B1을 뽑는 확률 + B1을 처음에 뽑는 확률
* 동일한 아이템이 선택되지 않도록 순차적으로 뽑는다고 생각하면,
두번째 선택시의 선택확률이 다시 주어져야 하지만 조건으로 주어지지 않았기 때문에
B1을 제외한 나머지의 선택확률은 남은 것들 중의 각각의 비중 비률로 계산함.
댓글2
-
세상의모든계산기
시뮬레이션의 결과 (비복원 - 본문 풀이 논리와 동일)
import random def generate_items_and_weights(): # a형 항목 a_items = [f'a{i}' for i in range(1, 6)] a_weights = [12] * 5 # 각 a형 항목의 선택 확률은 12% # b형 항목 b_items = [f'b{i}' for i in range(1, 6)] b_weights = [8] * 5 # 각 b형 항목의 선택 확률은 8% items = a_items + b_items weights = a_weights + b_weights return items, weights def draw_items(items, weights): if len(items) < 2: return [] # 항목이 충분하지 않으면 빈 리스트 반환 # 첫 번째 항목을 선택 first_item = random.choices(items, weights=weights, k=1)[0] first_index = items.index(first_item) # 선택한 항목을 제거 del items[first_index] del weights[first_index] # 두 번째 항목을 선택 second_item = random.choices(items, weights=weights, k=1)[0] return [first_item, second_item] def is_valid_draw(draw): return draw[0] != draw[1] def main(): total_trials = 10000000 # 테스트를 위한 시도 횟수 valid_count = 0 invalid_count = 0 b1_count = 0 for _ in range(total_trials): items, weights = generate_items_and_weights() drawn_items = draw_items(items, weights) if len(drawn_items) == 2: # 항목이 2개 선택되었는지 확인 if is_valid_draw(drawn_items): valid_count += 1 if 'b1' in drawn_items: b1_count += 1 else: invalid_count += 1 else: invalid_count += 1 if valid_count == 0: probability_b1_given_valid = 0 else: probability_b1_given_valid = b1_count / valid_count print(f"Total trials: {total_trials}") print(f"Valid draws: {valid_count}") print(f"Invalid draws: {invalid_count}") print(f"'b1' picked in valid draws: {b1_count}") print(f"Probability of 'b1' given valid draw: {probability_b1_given_valid:.4f}") if __name__ == "__main__": main()실행 결과
Total trials: 10000000
Valid draws: 10000000
Invalid draws: 0
'b1' picked in valid draws: 1623986
Probability of 'b1' given valid draw: 0.1624 -
세상의모든계산기
시뮬레이션의 결과 (복원 추출 - 단, 중복시 무효화 Invalid 처리)
위의 비복원 추출에서 코드 일부 주석처리하여 설정함.
# 선택한 항목을 제거 # del items[first_index] # del weights[first_index]실행 결과
Total trials: 10000000
Valid draws: 8960517
Invalid draws: 1039483
'b1' picked in valid draws: 1472355
Probability of 'b1' given valid draw: 0.1643비복원 추출과 결과가 같을 줄 알았는데... 0.2% 높게 나옴.
(여러차례 실행해도 같음)A1~B5 까지 중복시 무효처리가 동일하게 적용되기 때문에 영향이 없을 것으로 예상했지만,
실제로는 B1~B5 의 중복 선택 확률이 낮고 A1~A5의 중복 선택 확률이 높기 때문에,
B1이 안뽑히는 것 중에서 무효처리 되는 것이 상대적으로 많아짐.
즉 구하려는 확률에서 분모값이 작아지는 효과가 나타났고 확률값이 커지는 효과가 0.2% 상승으로 나타난 듯 함.
세상의모든계산기 님의 최근 댓글
기본 어댑터 MODEL : AD0301-1202500GB INPUT : 100~240V, 50~60Hz, 0.8A Max OUTPUT : 12.0V, 2.5A, 30.0W ㄴ 측정시 플러그 외경/내경 : 5.5mm / 2mm 2026 02.15 엑셀 파일로 만드니 전체 160~200MB 정도 나옵니다. 읽고 / 저장하는데 한참 걸리네요. 컴 사양을 좀 탈 것 같습니다. -> 엑셀/한셀에서 읽히지만, 구글 스프레드시트에서는 열리지 않네요. 100만 개 단위로 끊어서 20MB 정도로 분할해 저장하는 편이 오히려 속 편할 것 같습니다. -> 이건 구글 스프레드시트에서도 열리긴 하네요. (약간 버퍼링?이 있습니다) 2026 02.10 엑셀 / 행의 최대 개수, 열의 최대 개수, 셀의 최대 개수 엑셀의 행 개수 제한은 파일 형식에 따라 다르며, 최신 .xlsx 파일 형식은 시트당 최대 1,048,576행까지 지원하지만, 구형 .xls 파일은 65,536행으로 제한됩니다. 따라서 대용량 데이터를 다룰 때는 반드시 최신 파일 형식(.)으로 저장해야 하며, 행과 열의 총 수는 1,048,576행 x 16,384열이 최대입니다. 주요 행 개수 제한 사항: 최신 파일 형식 (.xlsx, .xlsm, .xlsb 등): 시트당 1,048,576행 (2^20). 구형 파일 형식 (.xls): 시트당 65,536행 (2^16). 그 외 알아두면 좋은 점: 최대 행 수: 1,048,576행 (100만여개) 최대 열 수: 16,384열 (XFD) 대용량 데이터 처리: 65,536행을 초과하는 데이터를 다루려면 반드시 .xlsx 형식으로 저장하고 사용해야 합니다. 문제 해결: 데이터가 많아 엑셀이 멈추거나 오류가 발생하면, 불필요한 빈 행을 정리하거나 Inquire 추가 기능을 활용하여 파일을 최적화할 수 있습니다. 2026 02.10 [일반계산기] 매출액 / 원가 / 마진율(=이익율)의 계산. https://allcalc.org/20806 2026 02.08 V2 갱신 (nonK / K-Type 통합형) 예전에는 직접 코드작성 + AI 보조 하여 프로그램 만들었었는데, 갈수록 복잡해져서 손 놓고 있었습니다. 이번에 antigravity 설치하고, 테스트 겸 새로 V2를 올렸습니다. 직접 코드작성하는 일은 전혀 없었고, 바이브 코딩으로 전체 작성했습니다. "잘 했다 / 틀렸다 / 계산기와 다르다." "어떤 방향에서 코드 수정해 봐라." AI가 실물 계산기 각정 버튼의 작동 방식에 대한 정확한 이해는 없는 상태라서, V1을 바탕으로 여러차례 수정해야 했습니다만, 예전과 비교하면 일취월장 했고, 훨씬 쉬워졌습니다. 2026 02.04