Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 기계학습
- 머신러닝
- Design Pattern
- numpy 기초
- 코드트리
- 파이썬
- lambda
- 데이터 분석
- OOP
- 코딩테스트실력진단
- java
- 디자인 패턴
- cpp
- ack
- NumPy
- 자바
- 클러스터링
- 데이터 마이닝
- 넘파이 배열
- 넘파이 기초
- Machine Learning
- 코딩테스트
- 차원축소
- c++
- 넘파이
- 코테
- 합성곱 신경망
- 네트워크 기초
- python
- cpp class
Archives
- Today
- Total
준비하는 대학생
[코드트리 챌린지] 4주차 - 이진탐색 / 컴퓨터와 함께하는 숫자 게임 2 본문
이 문제는 이분 탐색의 원리를 사용하여 해결할 수 있습니다. 컴퓨터가 선택한 숫자를 찾기 위해 사람들은 항상 범위의 중간값을 선택합니다. 따라서 가능한 최소와 최대의 횟수를 구하기 위해 이분 탐색을 수행하면서 횟수를 계산합니다.
def game_duration(m, a, b):
# 최소 횟수와 최대 횟수를 초기화합니다.
min_turns, max_turns = float('inf'), 0
# a부터 b까지의 모든 숫자에 대해 이분 탐색을 수행합니다.
for num in range(a, b + 1):
turns = 0
left, right = 1, m
# 이분 탐색을 시작합니다.
while left <= right:
# 중간값을 구합니다.
mid = (left + right) // 2
turns += 1
if mid == num:
break
elif mid < num:
left = mid + 1
else:
right = mid - 1
# 최소 횟수와 최대 횟수를 업데이트합니다.
min_turns = min(min_turns, turns)
max_turns = max(max_turns, turns)
return min_turns, max_turns
m = int(input())
a, b = map(int, input().split())
min_duration, max_duration = game_duration(m, a, b)
print(min_duration, max_duration)
이분 탐색을 활용한 숫자 게임
이 게임에서는 컴퓨터가 1부터 m까지의 숫자 중 하나를 선택하고, 참가자들은 이 숫자를 찾아야 합니다. 참가자들은 항상 가능한 범위의 중간값을 선택하여 예측합니다. 컴퓨터는 예측한 숫자가 자신이 선택한 숫자보다 작은지, 큰지, 또는 같은지를 알려줍니다.
이 문제의 핵심은 이분 탐색입니다. 이분 탐색은 정렬된 리스트에서 원하는 값을 효율적으로 찾는 알고리즘입니다. 이 게임에서도 참가자들은 이분 탐색의 원리를 사용하여 컴퓨터가 선택한 숫자를 찾습니다.
코드 설명:
- game_duration 함수는 m, a, b를 입력으로 받아 게임의 최소 지속 시간과 최대 지속 시간을 반환합니다.
- a부터 b까지의 모든 숫자에 대해 이분 탐색을 수행하며, 각 숫자를 찾는 데 필요한 횟수를 계산합니다.
- 이분 탐색을 수행하면서 예측한 숫자가 컴퓨터가 선택한 숫자보다 작은지, 큰지, 또는 같은지를 확인합니다.
- 최종적으로 게임의 최소 지속 시간과 최대 지속 시간을 반환합니다.
실력진단에서 나온 부족한 점을 점점 보완하면서 점수를 차근차근 올릴 수 있었다. 심화된 알고리즘을 학습하고 최대로 점수를 올려보아야겠다.
'Algorithm > 코드트리 블로그 챌린지' 카테고리의 다른 글
[코드트리 챌린지] 5주차 - Parametric Search / 최소 통과 시간 (1) | 2023.10.07 |
---|---|
[코드트리 챌린지] 3주차 - +1-1 Technique / 가장 많이 겹치는 구간 (0) | 2023.09.24 |
[코드트리 챌린지] 2주차 - HashMap / 원소의 합이 0 (0) | 2023.09.13 |
[코드트리 챌린지] 1주차 - 자리 수 단위로 완전탐색 / Carry 피하기 2 (0) | 2023.09.06 |
Comments