728x90
질문을 통해 답을 맞추는 놀이를 해보자
Q. 1,000 이하의 자연수 n을 생각할 테니 맞춰보시오.
A.
# 임의의 수 : 난수 (random 모듈 사용 : randint(a,b))
import random
def guess(answer, start, end):
print(answer)
while start < end :
mid = (start+end) // 2
if mid < answer :
start = mid +1
else:
end = mid
return start
A = random.randint(1, 1000)
print(guess(A, 1, 1000))
-> 1. 임의의 난수, 범위 시작 수, 마지막 수를 받는다.
2. 범위의 중간을 계산하여 mid 변수에 넣고 임의의 난수와 비교한다.
3. 중간값이 더 작을 경우에는 시작값을 중간값+1로 변경한다.
4. 중간값이 더 클 경우에는 마지막값을 중간값으로 변경한다.
5. 시작값이 마지막 값보다 커지면 끝난다.
Q. 몇 고개를 넘어야 답이 나올까?
A.
# 몇 고개를 넘어야 답을 맞출까?
def guess2(answer, start, end):
count = 0
while start < end :
count += 1 # 카운트 추가
mid = (start+end) // 2
if mid < answer :
start = mid +1
else:
end = mid
return count
B = random.randint(1,1000)
print(guess2(B, 1, 1000))
-> count 변수를 추가하여 횟수를 세어본다.
log 란?
수학함수의 일종으로, 어떤 수를 나타내기 위해 고정된 밑을 몇 번 곱하여야 하는지를 나타내는 함수이다.
예를들어, a가 2이고 x가 3이면 b는 8이 된다. 이를 거듭제곱이라고 하며
반면에 a는 2, b가 8이면 x는 무엇일까? 이러한 x를 구하는 것을 로그(Logarithmic)라고 한다.
위의 수식에서 log다음의 a는 밑, b는 진수라고 한다.
로그에는 조건이 있다. 1. 밑은 1이 아닌 양수여야 한다. ( a > 1 )
2. 진수는 1이상의 양수여야 한다. ( b >= 1 )
- 이해를 돕기 위한 문제 풀기
- python 으로 스무고개 문제를 풀고 문제와 log의 연관관계를 깨닫자
start = 1
for n in range(21): # 0부터 20까지
end = 2 ** n
maxcount = 0
for _ in range(1000):
answer = random.randint(start,end)
count = guess2(answer, start, end)
if maxcount < count :
maxcount = count
print(start, end, maxcount, 2 ** n)
< 출력 결과 >
-> end는 2의 n(=count)승 값임을 알 수 있다.
답을 구하기까지의 횟수(count)는 2의 지수를 뜻한다.
즉, log의 식으로 보면 a는 2, b는 end값이 되고 x는 답을 구하기까지의 횟수가 된다.
출처 : Youtube 주니온TV 아무거나연구소의 코린아, 코딩하자! with 파이썬
728x90
'IT > 알고리즘' 카테고리의 다른 글
[python/알고리즘] 이차원 배열로 마방진 만들기 (0) | 2021.05.16 |
---|---|
[python/알고리즘] 계란 낙하 실험 문제 (0) | 2021.05.15 |
[python/알고리즘] 로마 숫자를 아라비아 숫자로 변경하기 (1) | 2021.05.13 |
[python/알고리즘] 콜라츠의 추측 (2) | 2021.05.12 |
[python/알고리즘] 날짜 계산하기 (2) | 2021.05.11 |
댓글
250x250
최근에 올라온 글
TAG
- Pandas
- Max()
- 부스트코스
- Ai
- 머신러닝
- 주니온
- sklearn
- 자료구조
- SQL
- Min()
- Programmers
- db
- SQLD
- cnn
- 경사하강법
- 기계학습
- MongoDB
- 프로그래머스
- VGGNet
- OpenCV
- 인공지능
- Scikit
- numpy
- algorithm
- Project
- Python
- 파이썬
- 알고리즘
- 딥러닝
- slqd
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday