08wk-2: 랜덤모듈을 이용한 시뮬레이션 문제 예시

Author

최규빈

Published

April 26, 2024

0. break 와 while 이해

(1) 아래의 예시를 보고 break 의 사용방법을 파악하라.

# 주어진 문자열
word = "hello"

# 문자열에서 첫 번째 모음을 찾는 코드
for letter in word:
    if letter in "aeiou":  # 현재 문제가 모음인지 확인
        print(f"첫번째 모음은: {letter}")
        break  # 첫번째 모음을 찾으면 반복을 종료 
첫번째 모음은: e

(2) 아래의 예시를 보고 while의 사용방법을 파악하라.

num = 6

# 입력된 숫자의 팩토리얼을 계산
factorial = 1
while num > 0:
    factorial = factorial*num
    num = num - 1

# 계산된 팩토리얼을 출력
print(f"팩토리얼:", factorial)
팩토리얼: 720
num = 6

# 입력된 숫자의 팩토리얼을 계산
factorial = 1
while True:
    factorial = factorial*num
    num = num - 1
    if num == 0: 
        break 
        
# 계산된 팩토리얼을 출력
print(f"팩토리얼:", factorial)
팩토리얼: 720

1. 가위바위보 하나빼기

(1) 보람과 서연은 “가위바위보 하나빼기” 게임을 하려고 한다. 보람은 현재 [‘가위’,‘바위’] 를 가지고 있으며 서연은 현재 [‘가위’,‘보’] 를 가지고 있다. 보람과 서연이 가지고 있는 패 중 랜덤으로 하나를 낸다고 하자. 보람과 서연중 누가 더 유리한가? 1000번의 시뮬레이션을 통하여 검증하고 결과를 해석하라.

2. 공든탑 쌓기

규빈과 다호가 블록을 사용하여 탑을 쌓는다. 규빈은 한 번에 2개의 블록을 사용하여 탑을 쌓지만, 실수로 탑을 무너뜨릴 확률이 50%이다. 한 번 무너진 탑은 다시 처음부터 쌓아야 한다. 다호는 한 번에 1개의 블록을 사용하여 신중하게 탑을 쌓는다. 다호는 천천히 탑을 쌓지만 실수로 탑을 무너뜨리지 않는다.

(1) 2층 높이의 탑을 쌓을 때, 규빈과 다호 중 누가 먼저 탑을 올릴 확률이 높을까? 1000번의 시뮬레이션을 통해 결과를 확인해보라.

3. 규빈과 하니의 내기

(1) 앞면과 뒷면이 나올 확률이 각각 1/2인 동전을 생각하자. 하니와 규빈은 이 동전을 연속으로 던져서 아래와 같은 룰을 정하여 내기를 하였다.

  • 동전을 연속으로 반복하여 던진다. 최근 2회의 결과가 (뒷면,앞면) 이 나오면 하니의 승리
  • 동전을 연속으로 반복하여 던진다. 최근 2회의 결과가 (뒷면,뒷면) 이 나오면 규빈의 승리

이 내기는 하니가 유리한가? 규빈이 유리한가? 시뮬레이션을 통해 검증하라.

힌트: 똑같이 유리함

(2) 앞면과 뒷면이 나올 확률이 각각 1/2인 동전을 생각하자. 하니와 규빈은 이 동전을 연속으로 던져서 아래와 같은 룰을 정하여 내기를 하였다.

  • 동전을 연속으로 반복하여 던진다. 최근 2회의 결과가 (앞면,뒷면) 이 나오면 하니의 승리
  • 동전을 연속으로 반복하여 던진다. 최근 2회의 결과가 (뒷면,뒷면) 이 나오면 규빈의 승리

이 내기는 하니가 유리한가? 규빈이 유리한가? 시뮬레이션을 통해 검증하고 이유를 설명하라.

힌트: 하니가 유리함