๐ฐ๋ชฌํ ์นด๋ก๋ฒ์ผ๋ก ์นด๋ 1์ธ์ฉ ๊ฒ์'์๊ณ'์ ์ฑ๊ณต ํ๋ฅ ์ ๊ณ์ฐํ๋ ์ด์ผ๊ธฐ๐ฐ
12506 ๋จ์ด ํ๋ฅ Pythonํฌ์ปค์ด๋ณด์๋ชฌํ
์นด๋กํ
์ด ๋ฌธ์ฅ์ ๊ดํ์ฌ
์ด ๊ธ์ ํ๋ก๊ทธ๋๋ฐ ์ด๋ณด์๊ฐ ๋ฐฉ๊ธ ๊ธฐ์ตํ ๋ชฌํ
์นด๋ก๋ฒ์ ์ฌ์ฉํ ์ด์ผ๊ธฐ๋ค.
๋ฑ์ฅํ ์ฝ๋๋ ๋จ์ํ์ง๋ง ์ค๋ ์๋ฌธ๋ค์ ์์ ์ ์์ผ๋ก ํด๊ฒฐํ ์ ์์ด ๊ธฐ์๋ค๊ณ ๋ณด๋ํ์ต๋๋ค.
์ต์ข
์ ์ผ๋ก ์ป์ ํ๋ฅ (์๋นํ ์์ ๊ฐ)์ ์์น์ ์๋ฏธ์ ๋ํด ๊ณ ์ฐฐํ๊ณ ์์ต๋๋ค. ํ๋ฅ ์ ๋ฅํ ์ฌ๋์ ๋ฐ๋์ ์ ์๊ฒ ์๋ ค์ฃผ์ธ์.
์๊ณ
1์ธ ํฌ์ปค ๊ฒ์์ผ๋ก ๊ท์น์ด ๋งค์ฐ ๊ฐ๋จํ๋ค.
๋ํ ์ ์ ์ ์์ง๊ฐ ์ฝ์
๋ ์ฌ์ง๊ฐ ์๋ ์์ ํ ๊ท์น์ ๊ธฐ๋ฐ์ ์ด๊ฒ์์ด๊ธฐ ๋๋ฌธ์ ์ฆ๊ฑฐ์์ ๋ณด์ฅํ ์ ์๋ค.
์ค๋น
์ ์๋ฅธ ์นด๋ 52์ฅ์ ๊ทธ๋ฆผ์ผ๋ก 13๋ฌด๋๊ธฐ๋ก ๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์๊ณ์ ์๊ณํ์ ๋น์ ํ์ฌ ๊ฐ ์ฐ์์ ์ซ์๋ฅผ ๋ถ๋ฐฐํ๋ค.
๋๋จธ์ง ์ค์ฌ์ฐ์ ๋ฏธ๋ด์ฑ
์ผ๋ก ๋ถ๋ฐฐํด ์ฃผ์ญ์์ค.
ใใ
[๊ท์น]
1. ๋งจ ์์ ์๋ ์นด๋ 13๋๋ฏธ๋ฅผ ๋ค์ง๋๋ค.
2. ๋ค์งํ ์นด๋์ ๋ฒํธ๋ฅผ ํ์ธํ๊ณ ์ด๋ฒ์๋ ๊ทธ ๋ฒํธ๊ฐ ์์ธ ๋งจ ์์ ์๋ ์นด๋๋ฅผ ๋ค์ง๋๋ค.
3. ๊ณ์ํ ์๋ง ์๋ค๋ฉด 2์ ์ผ์ ๊ณ์ํ๋ค.
4. 4์ฅ 13์ด ๋์์ ๋ ๋ค์ง์ ์นด๋๊ฐ ์์ด์ก๊ณ ๊ฒ์์ด ๋๋ฌ๋ค.
5. ๋ชจ๋ ์นด๋๋ฅผ ๋ค์ง์ผ๋ฉด ์ฑ๊ณตํ๋ค. ๊ทธ ์ธ์๋ ์ผ๋ฅ ์ ์ผ๋ก ์คํจํ๋ค.
๋ญ ๊ณต๋ถ ํด์?๋ด ์๊ฐ์๋ ์ด๋ฐ ์ฌ๋์ด ์์ ๊ฒ ๊ฐ์ง๋ง, 13์ด์ด ๋๋ฉด ์๋ช
์ด ์ค์ด๋๋ ์ด๋ฐ ์์ฌ์์ฌํจ์ ์์ธ๋ก ์ค๋
์ฑ์ด ์๋ค.
๋ ์์ ์ ์ํ ์ ์ผ์ ํ์ค์ ํผํ๊ธฐ ์ํด ํฌ์ปค์ ์์ ๋ป๊ณ '์ง๋๋ฒ์ ๋ค์ ์์ํ์'๊ณ ํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ ์ด ๊ธฐ์ฌ๋ฅผ ์ฐ๊ณ ์๋ค.
์ข
์ด, ํ, ๋์ฅ์ผ๋ก ์ฑ๊ณต ํ๋ฅ ์ ๊ณ ๋ คํด ๋ณด์
์ง๊ฐ์ ์ผ๋ก ๋๋ ์ฑ๊ณต ํ๋ฅ ์ด 1/13์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ธ์์ผ๋ก ๊ธธ์ด 52์ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๊ฐ 13์ด๋ผ๋ฉด ์ฑ๊ณต์ด๊ณ , ๊ทธ ์ธ์๋ ์คํจ๋ค.
ํ์ง๋ง ์๊ฐํ ์๋ก ์ด๋ฐ ๋จ์ํจ์ ๋ฉ์ถ ์ ์๋ค.
์๊น์ ์๋ก ๋งํ์๋ฉด ์๊ณ๋ ๋ชฉ๋ก์ ์์์ ์ํด ๋ชฉ๋ก ์์์ ์ด๋ํ๋ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ด๋ค.
์ด๋ฐ ๋ณต์ก์ฑ์ ์ข
์ด, ํ, ๋๋ฏธ์ฆ์ ๋ถ๋ด์ด ์ข ์ปค์ ๋ฐฉ๊ธ ๋ฐฐ์ด ๋ชฌํ
์นด๋ก๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๋ชฌํ
์นด๋กํ
๋ชฌํ
์นด๋ก๋ฒ์ ํ๋ง๋๋ก ์ค๋ช
ํ๋ฉด
์ค์ ๋ก๋ ๋ช ์ฐจ๋ก ์๋ฎฌ๋ ์ด์
์ ํด ๋ณด๊ณ ์ฑ๊ณต ํ๋ฅ ์ ์กฐ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฒ์๋ Python์ผ๋ก ํ์ฌ๊ธ ์ฌ๋ฌ ๋ฒ ์๊ณ๋ฅผ ๋ง๋ค์ด ์ฑ๊ณต ํ์/์ํ ํ์๋ฅผ ์ธก์ ํ๊ฒ ํ๋ค.
์์ฃผ์จ ๊ณ์ฐ ๋ฑ ์ ๋ช
ํ ๊ธฐ๋ฒ์ด๋ผ ์๋ ์ฌ๋์ด ๋ง์ ์๋ ์๋ค.
์ฌ์ฌํ ์ผ์ ํ์ด์ฌ์ด ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ ์นด๋๋ฅผ ์ป๊ณ 52์ฅ์ ๋ฐฐ์ดํ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.def shuffle(): #52ๆใฎใซใผใใไธฆในใ
shuffle =[1,2,3,4,5,6,7,8,9,10,11,12,13]
shuffle += shuffle + shuffle + shuffle
random.shuffle(shuffle)
return shuffle
๊ฒ์์ ์ฌ๊ธฐ์๋ถํฐ.
๊ฒ์ด๋จธ์ ์์ง๋ฅผ ๊บพ์ ์ฌ์ง๊ฐ ์๋ ์์ ๊ท์น์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ์ด๊ฒ์ ์ค์น๋ ๊ฐ๋จํ๋ค.
๋๋ ์ฐ์ ํ์ํ ์ ๋ณด๋ฅผ ์ข
ํฉํด ๋ณด๊ฒ ๋ค.
์๊น ๋ง๋ 52์ฅ์ ๋ฆฌ์คํธ์ ์นด๋์ ๋์.
์์ธ: ์ฐ
0~3:1์ ์ฐ
4~7:2์ ์ฐ
...
(N-1)*4+i(0โคiโค3): N์ ์ฐ
์ ์๊ณก ํ์ ํธ ๊ฐ์
๋๋ค.
๋ํ ์ด๊ธฐ ๋์์ ๋ชฉ๋ก์ ์์๋ฅผ 0์ผ๋ก ๋ฐ๊พธ์ด ํ์ํฉ๋๋ค.def tokei():
cards = shuffle() #52ๆใฎใฉใณใใ ใช้
ๅใ็จๆ
flag =0
number = 13 #ๆๅใซ้ใ๏ผ๏ผ
while flag == 0:
#print(number)
if cards[(number-1)*4] != 0: #ใใฎ็ชๅทใๅใใฆ้ใใใๅ ดๅ
next = cards[(number-1)*4]
cards[(number-1)*4] = 0
number = next
elif cards[(number-1)*4+1] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+1]
cards[(number-1)*4+1] = 0
number = next
elif cards[(number-1)*4+2] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+2]
cards[(number-1)*4+2] = 0
number = next
elif cards[(number-1)*4+3] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+3]
cards[(number-1)*4+3] = 0
number = next
else: #13ใ4ๆๅบใกใใฃใๅ ดๅor็ตใใฃใๅ ดๅ
flag =1
return sum(cards)
๋ชฌํ
์นด๋กํ๊ฐ ๋๋์ด ๋ฑ์ฅํ๋ค.def Monte_Carlo(n):
N = 0
for i in range(n):
if tokei() == 0:
N += 1
return N/n
์ง๊ธ ๋ง ์์ผ๋ก n์ ์คํํด ๋ณด์ธ์.Monte_Carlo(10000)
0.0787
๊ทธ ์ ๋ ๊ฐ๊ฒฉ์ด ๋์์ด์.
ํต๊ณ๋ ์ ๋ชปํ์ง๋ง 100๋ง ๋ฒ ์๋ํ๋ฉด ์ถฉ๋ถํ๊ฐ.print("100ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100)))
print("1000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000)))
print("10000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(10000)))
print("100000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100000)))
print("1000000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000000)))
print("1/13 = " + str(1/13))
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.100ๅใฎ่ฉฆ่กใงใฏ 0.07
1000ๅใฎ่ฉฆ่กใงใฏ 0.083
10000ๅใฎ่ฉฆ่กใงใฏ 0.0736
100000ๅใฎ่ฉฆ่กใงใฏ 0.07664
1000000ๅใฎ่ฉฆ่กใงใฏ 0.076582
1/13 = 0.07692307692307693
๋๋ ํต๊ณ๋ฅผ ์ํ์ง ๋ชปํ๋๋ฐ, ์ด๊ฒ์ด ๋๋ต 13๋ถ์ 1๊น์ง ์๋ ด๋๋ค๊ณ ๋งํ ์ ์์ต๋๊น?
๊ทธ๋ ๊ฒ ํฉ์๋ค.
์ด๊ดํ๋ค
์์ ์ ์์ผ๋ก ์ด ์ฝ๋๋ก ๊ฒฐ๋ก ์ ์ป์ด ๋งค์ฐ ๊ธฐ๋ปค๋ค.
while ๋ฉ์ถ์ง ๋ชปํด, ์ฒซ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ๋ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ํ์ดํ
.
์ํ ์ ์ผ์ ํ์ค์ ๋ํผํ๋ ๊ฒ์ ๋งค์ฐ ๋ฌด์ญ๋ค.
๋จ์ ์๋ฌธ์ ์ ์ฑ๊ณต ํ๋ฅ ์ด 1/13(๋๋ ๊ฐ๊น์ด ๊ฐ)์ธ์ง ๋ค์ ํ
์คํธ ์ ์ ์๊ฐํด ๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๊ฑธ ์ฝ์ผ์ ๋ถ์ ๋ต์ ์ฐพ์ผ์ ๋ถ์ด ์์ผ๋ฉด ๊ผญ ์๋ ค์ฃผ์ธ์.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฐ๋ชฌํ
์นด๋ก๋ฒ์ผ๋ก ์นด๋ 1์ธ์ฉ ๊ฒ์'์๊ณ'์ ์ฑ๊ณต ํ๋ฅ ์ ๊ณ์ฐํ๋ ์ด์ผ๊ธฐ๐ฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค
https://qiita.com/Marukutekenohaetabuttai/items/d55d221b0085e25e5cf8
ํ
์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
1์ธ ํฌ์ปค ๊ฒ์์ผ๋ก ๊ท์น์ด ๋งค์ฐ ๊ฐ๋จํ๋ค.
๋ํ ์ ์ ์ ์์ง๊ฐ ์ฝ์ ๋ ์ฌ์ง๊ฐ ์๋ ์์ ํ ๊ท์น์ ๊ธฐ๋ฐ์ ์ด๊ฒ์์ด๊ธฐ ๋๋ฌธ์ ์ฆ๊ฑฐ์์ ๋ณด์ฅํ ์ ์๋ค.
์ค๋น
์ ์๋ฅธ ์นด๋ 52์ฅ์ ๊ทธ๋ฆผ์ผ๋ก 13๋ฌด๋๊ธฐ๋ก ๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์๊ณ์ ์๊ณํ์ ๋น์ ํ์ฌ ๊ฐ ์ฐ์์ ์ซ์๋ฅผ ๋ถ๋ฐฐํ๋ค.
๋๋จธ์ง ์ค์ฌ์ฐ์ ๋ฏธ๋ด์ฑ ์ผ๋ก ๋ถ๋ฐฐํด ์ฃผ์ญ์์ค.
ใใ
[๊ท์น]
1. ๋งจ ์์ ์๋ ์นด๋ 13๋๋ฏธ๋ฅผ ๋ค์ง๋๋ค.
2. ๋ค์งํ ์นด๋์ ๋ฒํธ๋ฅผ ํ์ธํ๊ณ ์ด๋ฒ์๋ ๊ทธ ๋ฒํธ๊ฐ ์์ธ ๋งจ ์์ ์๋ ์นด๋๋ฅผ ๋ค์ง๋๋ค.
3. ๊ณ์ํ ์๋ง ์๋ค๋ฉด 2์ ์ผ์ ๊ณ์ํ๋ค.
4. 4์ฅ 13์ด ๋์์ ๋ ๋ค์ง์ ์นด๋๊ฐ ์์ด์ก๊ณ ๊ฒ์์ด ๋๋ฌ๋ค.
5. ๋ชจ๋ ์นด๋๋ฅผ ๋ค์ง์ผ๋ฉด ์ฑ๊ณตํ๋ค. ๊ทธ ์ธ์๋ ์ผ๋ฅ ์ ์ผ๋ก ์คํจํ๋ค.
๋ญ ๊ณต๋ถ ํด์?๋ด ์๊ฐ์๋ ์ด๋ฐ ์ฌ๋์ด ์์ ๊ฒ ๊ฐ์ง๋ง, 13์ด์ด ๋๋ฉด ์๋ช ์ด ์ค์ด๋๋ ์ด๋ฐ ์์ฌ์์ฌํจ์ ์์ธ๋ก ์ค๋ ์ฑ์ด ์๋ค.
๋ ์์ ์ ์ํ ์ ์ผ์ ํ์ค์ ํผํ๊ธฐ ์ํด ํฌ์ปค์ ์์ ๋ป๊ณ '์ง๋๋ฒ์ ๋ค์ ์์ํ์'๊ณ ํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ ์ด ๊ธฐ์ฌ๋ฅผ ์ฐ๊ณ ์๋ค.
์ข
์ด, ํ, ๋์ฅ์ผ๋ก ์ฑ๊ณต ํ๋ฅ ์ ๊ณ ๋ คํด ๋ณด์
์ง๊ฐ์ ์ผ๋ก ๋๋ ์ฑ๊ณต ํ๋ฅ ์ด 1/13์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ธ์์ผ๋ก ๊ธธ์ด 52์ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๊ฐ 13์ด๋ผ๋ฉด ์ฑ๊ณต์ด๊ณ , ๊ทธ ์ธ์๋ ์คํจ๋ค.
ํ์ง๋ง ์๊ฐํ ์๋ก ์ด๋ฐ ๋จ์ํจ์ ๋ฉ์ถ ์ ์๋ค.
์๊น์ ์๋ก ๋งํ์๋ฉด ์๊ณ๋ ๋ชฉ๋ก์ ์์์ ์ํด ๋ชฉ๋ก ์์์ ์ด๋ํ๋ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ด๋ค.
์ด๋ฐ ๋ณต์ก์ฑ์ ์ข
์ด, ํ, ๋๋ฏธ์ฆ์ ๋ถ๋ด์ด ์ข ์ปค์ ๋ฐฉ๊ธ ๋ฐฐ์ด ๋ชฌํ
์นด๋ก๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๋ชฌํ
์นด๋กํ
๋ชฌํ
์นด๋ก๋ฒ์ ํ๋ง๋๋ก ์ค๋ช
ํ๋ฉด
์ค์ ๋ก๋ ๋ช ์ฐจ๋ก ์๋ฎฌ๋ ์ด์
์ ํด ๋ณด๊ณ ์ฑ๊ณต ํ๋ฅ ์ ์กฐ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฒ์๋ Python์ผ๋ก ํ์ฌ๊ธ ์ฌ๋ฌ ๋ฒ ์๊ณ๋ฅผ ๋ง๋ค์ด ์ฑ๊ณต ํ์/์ํ ํ์๋ฅผ ์ธก์ ํ๊ฒ ํ๋ค.
์์ฃผ์จ ๊ณ์ฐ ๋ฑ ์ ๋ช
ํ ๊ธฐ๋ฒ์ด๋ผ ์๋ ์ฌ๋์ด ๋ง์ ์๋ ์๋ค.
์ฌ์ฌํ ์ผ์ ํ์ด์ฌ์ด ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ ์นด๋๋ฅผ ์ป๊ณ 52์ฅ์ ๋ฐฐ์ดํ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.def shuffle(): #52ๆใฎใซใผใใไธฆในใ
shuffle =[1,2,3,4,5,6,7,8,9,10,11,12,13]
shuffle += shuffle + shuffle + shuffle
random.shuffle(shuffle)
return shuffle
๊ฒ์์ ์ฌ๊ธฐ์๋ถํฐ.
๊ฒ์ด๋จธ์ ์์ง๋ฅผ ๊บพ์ ์ฌ์ง๊ฐ ์๋ ์์ ๊ท์น์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ์ด๊ฒ์ ์ค์น๋ ๊ฐ๋จํ๋ค.
๋๋ ์ฐ์ ํ์ํ ์ ๋ณด๋ฅผ ์ข
ํฉํด ๋ณด๊ฒ ๋ค.
์๊น ๋ง๋ 52์ฅ์ ๋ฆฌ์คํธ์ ์นด๋์ ๋์.
์์ธ: ์ฐ
0~3:1์ ์ฐ
4~7:2์ ์ฐ
...
(N-1)*4+i(0โคiโค3): N์ ์ฐ
์ ์๊ณก ํ์ ํธ ๊ฐ์
๋๋ค.
๋ํ ์ด๊ธฐ ๋์์ ๋ชฉ๋ก์ ์์๋ฅผ 0์ผ๋ก ๋ฐ๊พธ์ด ํ์ํฉ๋๋ค.def tokei():
cards = shuffle() #52ๆใฎใฉใณใใ ใช้
ๅใ็จๆ
flag =0
number = 13 #ๆๅใซ้ใ๏ผ๏ผ
while flag == 0:
#print(number)
if cards[(number-1)*4] != 0: #ใใฎ็ชๅทใๅใใฆ้ใใใๅ ดๅ
next = cards[(number-1)*4]
cards[(number-1)*4] = 0
number = next
elif cards[(number-1)*4+1] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+1]
cards[(number-1)*4+1] = 0
number = next
elif cards[(number-1)*4+2] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+2]
cards[(number-1)*4+2] = 0
number = next
elif cards[(number-1)*4+3] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+3]
cards[(number-1)*4+3] = 0
number = next
else: #13ใ4ๆๅบใกใใฃใๅ ดๅor็ตใใฃใๅ ดๅ
flag =1
return sum(cards)
๋ชฌํ
์นด๋กํ๊ฐ ๋๋์ด ๋ฑ์ฅํ๋ค.def Monte_Carlo(n):
N = 0
for i in range(n):
if tokei() == 0:
N += 1
return N/n
์ง๊ธ ๋ง ์์ผ๋ก n์ ์คํํด ๋ณด์ธ์.Monte_Carlo(10000)
0.0787
๊ทธ ์ ๋ ๊ฐ๊ฒฉ์ด ๋์์ด์.
ํต๊ณ๋ ์ ๋ชปํ์ง๋ง 100๋ง ๋ฒ ์๋ํ๋ฉด ์ถฉ๋ถํ๊ฐ.print("100ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100)))
print("1000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000)))
print("10000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(10000)))
print("100000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100000)))
print("1000000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000000)))
print("1/13 = " + str(1/13))
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.100ๅใฎ่ฉฆ่กใงใฏ 0.07
1000ๅใฎ่ฉฆ่กใงใฏ 0.083
10000ๅใฎ่ฉฆ่กใงใฏ 0.0736
100000ๅใฎ่ฉฆ่กใงใฏ 0.07664
1000000ๅใฎ่ฉฆ่กใงใฏ 0.076582
1/13 = 0.07692307692307693
๋๋ ํต๊ณ๋ฅผ ์ํ์ง ๋ชปํ๋๋ฐ, ์ด๊ฒ์ด ๋๋ต 13๋ถ์ 1๊น์ง ์๋ ด๋๋ค๊ณ ๋งํ ์ ์์ต๋๊น?
๊ทธ๋ ๊ฒ ํฉ์๋ค.
์ด๊ดํ๋ค
์์ ์ ์์ผ๋ก ์ด ์ฝ๋๋ก ๊ฒฐ๋ก ์ ์ป์ด ๋งค์ฐ ๊ธฐ๋ปค๋ค.
while ๋ฉ์ถ์ง ๋ชปํด, ์ฒซ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ๋ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ํ์ดํ
.
์ํ ์ ์ผ์ ํ์ค์ ๋ํผํ๋ ๊ฒ์ ๋งค์ฐ ๋ฌด์ญ๋ค.
๋จ์ ์๋ฌธ์ ์ ์ฑ๊ณต ํ๋ฅ ์ด 1/13(๋๋ ๊ฐ๊น์ด ๊ฐ)์ธ์ง ๋ค์ ํ
์คํธ ์ ์ ์๊ฐํด ๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๊ฑธ ์ฝ์ผ์ ๋ถ์ ๋ต์ ์ฐพ์ผ์ ๋ถ์ด ์์ผ๋ฉด ๊ผญ ์๋ ค์ฃผ์ธ์.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฐ๋ชฌํ
์นด๋ก๋ฒ์ผ๋ก ์นด๋ 1์ธ์ฉ ๊ฒ์'์๊ณ'์ ์ฑ๊ณต ํ๋ฅ ์ ๊ณ์ฐํ๋ ์ด์ผ๊ธฐ๐ฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค
https://qiita.com/Marukutekenohaetabuttai/items/d55d221b0085e25e5cf8
ํ
์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
๋ชฌํ ์นด๋ก๋ฒ์ ํ๋ง๋๋ก ์ค๋ช ํ๋ฉด
์ค์ ๋ก๋ ๋ช ์ฐจ๋ก ์๋ฎฌ๋ ์ด์ ์ ํด ๋ณด๊ณ ์ฑ๊ณต ํ๋ฅ ์ ์กฐ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฒ์๋ Python์ผ๋ก ํ์ฌ๊ธ ์ฌ๋ฌ ๋ฒ ์๊ณ๋ฅผ ๋ง๋ค์ด ์ฑ๊ณต ํ์/์ํ ํ์๋ฅผ ์ธก์ ํ๊ฒ ํ๋ค.
์์ฃผ์จ ๊ณ์ฐ ๋ฑ ์ ๋ช ํ ๊ธฐ๋ฒ์ด๋ผ ์๋ ์ฌ๋์ด ๋ง์ ์๋ ์๋ค.
์ฌ์ฌํ ์ผ์ ํ์ด์ฌ์ด ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ ์นด๋๋ฅผ ์ป๊ณ 52์ฅ์ ๋ฐฐ์ดํ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.def shuffle(): #52ๆใฎใซใผใใไธฆในใ
shuffle =[1,2,3,4,5,6,7,8,9,10,11,12,13]
shuffle += shuffle + shuffle + shuffle
random.shuffle(shuffle)
return shuffle
๊ฒ์์ ์ฌ๊ธฐ์๋ถํฐ.
๊ฒ์ด๋จธ์ ์์ง๋ฅผ ๊บพ์ ์ฌ์ง๊ฐ ์๋ ์์ ๊ท์น์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ์ด๊ฒ์ ์ค์น๋ ๊ฐ๋จํ๋ค.
๋๋ ์ฐ์ ํ์ํ ์ ๋ณด๋ฅผ ์ข
ํฉํด ๋ณด๊ฒ ๋ค.
์๊น ๋ง๋ 52์ฅ์ ๋ฆฌ์คํธ์ ์นด๋์ ๋์.
์์ธ: ์ฐ
0~3:1์ ์ฐ
4~7:2์ ์ฐ
...
(N-1)*4+i(0โคiโค3): N์ ์ฐ
์ ์๊ณก ํ์ ํธ ๊ฐ์
๋๋ค.
๋ํ ์ด๊ธฐ ๋์์ ๋ชฉ๋ก์ ์์๋ฅผ 0์ผ๋ก ๋ฐ๊พธ์ด ํ์ํฉ๋๋ค.def tokei():
cards = shuffle() #52ๆใฎใฉใณใใ ใช้
ๅใ็จๆ
flag =0
number = 13 #ๆๅใซ้ใ๏ผ๏ผ
while flag == 0:
#print(number)
if cards[(number-1)*4] != 0: #ใใฎ็ชๅทใๅใใฆ้ใใใๅ ดๅ
next = cards[(number-1)*4]
cards[(number-1)*4] = 0
number = next
elif cards[(number-1)*4+1] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+1]
cards[(number-1)*4+1] = 0
number = next
elif cards[(number-1)*4+2] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+2]
cards[(number-1)*4+2] = 0
number = next
elif cards[(number-1)*4+3] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+3]
cards[(number-1)*4+3] = 0
number = next
else: #13ใ4ๆๅบใกใใฃใๅ ดๅor็ตใใฃใๅ ดๅ
flag =1
return sum(cards)
๋ชฌํ
์นด๋กํ๊ฐ ๋๋์ด ๋ฑ์ฅํ๋ค.def Monte_Carlo(n):
N = 0
for i in range(n):
if tokei() == 0:
N += 1
return N/n
์ง๊ธ ๋ง ์์ผ๋ก n์ ์คํํด ๋ณด์ธ์.Monte_Carlo(10000)
0.0787
๊ทธ ์ ๋ ๊ฐ๊ฒฉ์ด ๋์์ด์.
ํต๊ณ๋ ์ ๋ชปํ์ง๋ง 100๋ง ๋ฒ ์๋ํ๋ฉด ์ถฉ๋ถํ๊ฐ.print("100ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100)))
print("1000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000)))
print("10000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(10000)))
print("100000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100000)))
print("1000000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000000)))
print("1/13 = " + str(1/13))
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.100ๅใฎ่ฉฆ่กใงใฏ 0.07
1000ๅใฎ่ฉฆ่กใงใฏ 0.083
10000ๅใฎ่ฉฆ่กใงใฏ 0.0736
100000ๅใฎ่ฉฆ่กใงใฏ 0.07664
1000000ๅใฎ่ฉฆ่กใงใฏ 0.076582
1/13 = 0.07692307692307693
๋๋ ํต๊ณ๋ฅผ ์ํ์ง ๋ชปํ๋๋ฐ, ์ด๊ฒ์ด ๋๋ต 13๋ถ์ 1๊น์ง ์๋ ด๋๋ค๊ณ ๋งํ ์ ์์ต๋๊น?
๊ทธ๋ ๊ฒ ํฉ์๋ค.
์ด๊ดํ๋ค
์์ ์ ์์ผ๋ก ์ด ์ฝ๋๋ก ๊ฒฐ๋ก ์ ์ป์ด ๋งค์ฐ ๊ธฐ๋ปค๋ค.
while ๋ฉ์ถ์ง ๋ชปํด, ์ฒซ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ๋ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ํ์ดํ
.
์ํ ์ ์ผ์ ํ์ค์ ๋ํผํ๋ ๊ฒ์ ๋งค์ฐ ๋ฌด์ญ๋ค.
๋จ์ ์๋ฌธ์ ์ ์ฑ๊ณต ํ๋ฅ ์ด 1/13(๋๋ ๊ฐ๊น์ด ๊ฐ)์ธ์ง ๋ค์ ํ
์คํธ ์ ์ ์๊ฐํด ๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๊ฑธ ์ฝ์ผ์ ๋ถ์ ๋ต์ ์ฐพ์ผ์ ๋ถ์ด ์์ผ๋ฉด ๊ผญ ์๋ ค์ฃผ์ธ์.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฐ๋ชฌํ
์นด๋ก๋ฒ์ผ๋ก ์นด๋ 1์ธ์ฉ ๊ฒ์'์๊ณ'์ ์ฑ๊ณต ํ๋ฅ ์ ๊ณ์ฐํ๋ ์ด์ผ๊ธฐ๐ฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค
https://qiita.com/Marukutekenohaetabuttai/items/d55d221b0085e25e5cf8
ํ
์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
def shuffle(): #52ๆใฎใซใผใใไธฆในใ
shuffle =[1,2,3,4,5,6,7,8,9,10,11,12,13]
shuffle += shuffle + shuffle + shuffle
random.shuffle(shuffle)
return shuffle
def tokei():
cards = shuffle() #52ๆใฎใฉใณใใ ใช้
ๅใ็จๆ
flag =0
number = 13 #ๆๅใซ้ใ๏ผ๏ผ
while flag == 0:
#print(number)
if cards[(number-1)*4] != 0: #ใใฎ็ชๅทใๅใใฆ้ใใใๅ ดๅ
next = cards[(number-1)*4]
cards[(number-1)*4] = 0
number = next
elif cards[(number-1)*4+1] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+1]
cards[(number-1)*4+1] = 0
number = next
elif cards[(number-1)*4+2] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+2]
cards[(number-1)*4+2] = 0
number = next
elif cards[(number-1)*4+3] != 0: #ใใฎ็ชๅทใ๏ผๅ็ฎใซ้ใใใๅ ดๅ
next = cards[(number-1)*4+3]
cards[(number-1)*4+3] = 0
number = next
else: #13ใ4ๆๅบใกใใฃใๅ ดๅor็ตใใฃใๅ ดๅ
flag =1
return sum(cards)
def Monte_Carlo(n):
N = 0
for i in range(n):
if tokei() == 0:
N += 1
return N/n
Monte_Carlo(10000)
0.0787
print("100ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100)))
print("1000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000)))
print("10000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(10000)))
print("100000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(100000)))
print("1000000ๅใฎ่ฉฆ่กใงใฏ "+ str(Monte_Carlo(1000000)))
print("1/13 = " + str(1/13))
100ๅใฎ่ฉฆ่กใงใฏ 0.07
1000ๅใฎ่ฉฆ่กใงใฏ 0.083
10000ๅใฎ่ฉฆ่กใงใฏ 0.0736
100000ๅใฎ่ฉฆ่กใงใฏ 0.07664
1000000ๅใฎ่ฉฆ่กใงใฏ 0.076582
1/13 = 0.07692307692307693
์์ ์ ์์ผ๋ก ์ด ์ฝ๋๋ก ๊ฒฐ๋ก ์ ์ป์ด ๋งค์ฐ ๊ธฐ๋ปค๋ค.
while ๋ฉ์ถ์ง ๋ชปํด, ์ฒซ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ๋ ๋ฒ์งธ ๊ฒ์๋ง ๋๊ธฐ๋ฉด ๋, ํ์ดํ .
์ํ ์ ์ผ์ ํ์ค์ ๋ํผํ๋ ๊ฒ์ ๋งค์ฐ ๋ฌด์ญ๋ค.
๋จ์ ์๋ฌธ์ ์ ์ฑ๊ณต ํ๋ฅ ์ด 1/13(๋๋ ๊ฐ๊น์ด ๊ฐ)์ธ์ง ๋ค์ ํ ์คํธ ์ ์ ์๊ฐํด ๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๊ฑธ ์ฝ์ผ์ ๋ถ์ ๋ต์ ์ฐพ์ผ์ ๋ถ์ด ์์ผ๋ฉด ๊ผญ ์๋ ค์ฃผ์ธ์.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฐ๋ชฌํ ์นด๋ก๋ฒ์ผ๋ก ์นด๋ 1์ธ์ฉ ๊ฒ์'์๊ณ'์ ์ฑ๊ณต ํ๋ฅ ์ ๊ณ์ฐํ๋ ์ด์ผ๊ธฐ๐ฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://qiita.com/Marukutekenohaetabuttai/items/d55d221b0085e25e5cf8ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค