티스토리 뷰
import random
random.random() 은 결과값 0~1사이의 무작위 숫자를 뽑아준다.
random.randrange(1, 7)은 1이상 7미만의 난수이다. randrange(a, b-1) 인셈
원래 구현해보고자 했던것. 50%확률을 연속으로 7번 실패할 확률.
이름을 epic으로 지어줬고 실행하면 success가 7보다 낮을때까지 try_count를 1씩 올려가며 반복하다가 while문에서 빠져나온다. 그러면 1 / try_count 가 확률이 된다. 성공횟수 / 시도횟수 인셈.
if문을 보면 randint(1 , 2)가 2면 success가 1 올라간다. randint는 1 아니면 2 를 무작위로 뽑아주니까 50%확률이다.
그러다가 randint(1,2)가 2가 아닌 다른것 (여기선 1) 이 나오면 연속으로 성공한게 아니니 성공횟수를 다시 0으로 돌려보낸다. 그렇게 while < 7 : 조건을 만족할때까지 돌고돌면서 try_count를 늘려준다.
그러면 이제 7번 연속 성공하면 (0에서 시작하니까 첫시도가 0이다. 0~6 을 성공하면 7번인 셈) return 값으로 답이 나오게 해주었다. "확률은 %f 퍼센트 입니다."%(1/ try_count) %f 는 소수형이고, % 으로 뭐가 들어갈지 지정해줌.
이렇게 살펴보니 일단 try_count가 if문을 실행 할 때마다 1씩 올라가므로 if문이 끝나면 그냥 try_count를 1 올려주는게 코드가 더 깔끔할것 같다.
이렇게 수정해도 똑같나? 일일이 체크하면서 복습하기
그렇다. if문에 print를 넣어보고 테스트 결과를 넣어보니 if문이 끝났을때 넣는게 더 깔끔하고 결과도 똑같았다.
이렇게 보니 success가 7번 연속 떠야 코드가 끝나는것도 확인이 가능했다.
문제는 몇 달전 처음 코딩을 배울때도 비슷하게 구현해 본 적이 있는데 확률이란것은 경우의 수에서 나온것이고,
경우의 수 라는것이 한번 시도하고 확률은 몇이다. 라고 끝나는 것이 아니라 시행 횟수가 많을수록 신뢰도가 올라간다.
그래서 여러번 반복하는 코드를 짜보았다. 몇번 실패했는데 결국 완성된듯하다.
while문을 하나 더 작성하여 total_success를 집어넣었다. 그리고 기존의 success는 while문 밑으로 옮겨진다.
그러면이제 total_success가 10만번 이하일경우 계속 돌아가고, 밑에선 또 try_count를 계속 올리면서 7연속성공할때까지 돌아간다. 7연속성공시 while success <7: 을 빠져나오며 total_success가 1올라가지만 상위의 while total_success 조건이 안맞으면 다시 돌아간다. @_@
그렇게 총 성공횟수 / 총 시도횟수를 더 많이 돌린후에 return해준 코드완성?
100만번을 돌려봤는데 결과값이 나오는게 너무 오래걸린다. 시행횟수가 너무 많아서 오래걸릴수 밖에 없는건지 시간복잡도를 줄일 수 있는방법은 없는지 생각해봐야겠다.
그리고 이 코드는 너무 딱딱하다. 시도횟수랑 연속성공횟수를 정해놓아서 내가 원하는 이번경우에만 돌아간다.
그래서 수정하기로 했다.
그래서 몇연승 하는지 조건걸고 싶으면 streak 에다가 숫자를 집어넣고, 몇번 누적하고 싶은지는 total에다가 집어넣는 걸로 변경했다. 한번만 하고싶으면 epci(x, 1)을 하면 되는것이다.
코딩을 배운지 2주차에 이것과 비슷하게 만들어 보려고 했었는데 확률구현은 쉬운데 만든걸 여러번 반복 누적해서 하는걸 못했었다. while문을 덧씌운다고 해야하나? 생각해보니 그때도 좀만 머리썻으면 해낼 수 있었을 것 같다.
아주 기초적인것들이지만 내가 직접 백지부터 작성하는게 많은 공부가 된 것 같다.
자료구조를 배우고 있는데 다 배운다음에 시간복잡도같은 문제를 개선할 수 있는지 한번 더 체크해봐야겠다.
자기전에 갑자기 생각나서 수정함
'Python' 카테고리의 다른 글
[Python]프로그래머스 코딩테스트연습 완주하지못한선수 (0) | 2020.07.19 |
---|---|
[Python] queue(대기열) 모듈 (0) | 2020.07.11 |
[Python] 더블리 링크드 리스트 삭제 연습 (0) | 2020.07.07 |
- Total
- Today
- Yesterday
- javascript 객체배열
- 윈도우 chmod
- heap max
- 배열 특정객체 제거
- vue bootstrap scss
- Python
- 프로그래머스
- 프로그래머스 코딩테스트
- 배열 특정요소 제거
- 코드잇 강의
- dict 연속성
- 다리위를지나는트럭
- JavaScript
- Vue.js 입문
- chmod 400
- 부트스트랩 커스텀
- vue.js 특징
- 데이터 사이언스 프로그래밍 파이썬
- 코딩테스트
- Java수료
- Vue.js 프로젝트 투입 일주일 전
- Vue.js 책
- windows10 chmod 400
- Vue.js강의
- 입문
- bootstrap5
- MySQL 문제
- 파이썬
- vue.js 개념
- Vue.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |