숫자 카운터를 어떤 알고리즘으로 해야할지 몰라서요
조회수 1835회
숫자를 증가시키는 카운터를 만들려고 합니다.
선거개표 현황과 유사한 형태의 카운터를 만드려고 합니다.
예를 들어서 15000 이란 숫자를 카운터 하는데요.
15000이 계속 카운터가 되는 것이 아니라 24시간 동안 숫자가 증가 되게 하는것 입니다.
그래서 7초마다 증가를 해서 저녁 12시 쯔음에 15000이 도달하도록이요..
7초마다 증가할때는 올라가는 숫자는 일정하지 않도록 하면서요 ..
그리고 한가지 더는 여러 사람이 확인을 할수 있어서 다른곳에서 다른 시간에 접속을 하더라도
동일한 숫자 카운터가 되도록 하는 겁니다.
최종 도달해야하는 숫자는 매일 달라집니다.
그리고 카운터 시작은 매일 00시에 시작을 해서 아침 9시 접속을 하면 0에서 부터 시작이 아니라
00시에서 9시까지의 카운터를 계산을 해서 시작이 되어지도록 해야합니다.
정리를 해보면
1) 매 7초마다 숫자가 증가하여 최종 도달 숫자까지 가는데 24시간이 걸리게 한다.
2) 최종 도달 숫자는 매일 달라진다.
3) 7초마다 증가되는 숫자도 달라야 한다.
4) 여러곳에서 확인을 하여도 같은 카운터를 보여줘야 한다.
5) 카운터 시작은 매일 00시를 기준으로 시작이 된다.
아무리 고민해도 어떤 알고리즘으로 해야할지 몰라서요 ㅠ.ㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
7초마다 굳이 숫자를 업데이트할 필요는 없을것 같습니다. 웹페이지라면 사용자에게 페이지 요청이 있을때 마다만 숫자를 업데이트 하면 더 좋을것 같습니다.
- last_count: 지난번에 사용자에게 노출한 숫자
- last_update_time: 지난번에 사용자에게 노출한 시간
- target_count: 오늘 달성해야 하는 목표 사용자 수
와 같이 3개의 값은 DB에 저장하고 있으면 되겠네요.
(1) 사용자로부터 요청이 지난번 요청으로 부터 7초 이내라면 지난번 값을 그대로 주고 (2) 그렇지 않으면 최종 target_count를 달성하기 위해서 1초당 얼마씩 증가해야 하는지를 계산(
increment_per_second
)를 구한 다음에 지난번 업데이트로 부터 몇초나 지났는지(elapsed_time
)를 가지고 표시할 숫자를 변경하면 되겠습니다.import datetime def user_count(): # last_count, last_update_time, taget_count는 DB등에서 읽어와서 사용하세요. # 아래의 값은 임의의 값을 넣은겁니다. last_count = 10 last_update_time = datetime.datetime.now().replace(hour=1) target_count = 10000 elapsed_time = (datetime.datetime.now()-last_update_time).total_seconds() if elapsed_time <7 : return last_count increment_per_second =(target_count-last_count)/(datetime.datetime.now().replace(hour=23,minute=59,second=59) - last_update_time).total_seconds() #여기서 increment_per_second를 적당히 랜덤하게 변경 #last_count와 last_update_time은 db에도 업데이트 되어야 함 last_count = last_count + elapsed_time * increment_per_second last_update_time = datetime.datetime.now() return last_count
매일 target_count를 변경하는 로직은 생략했습니다.
댓글 입력