오늘의 학습 키워드
이분 탐색(이진 탐색)이란?
- 정렬되어 있는 리스트에서 탐색 범위를 타노스처럼 절반씩 좁혀가며 데이터를 탐색하는 방법이다.
- 탐색 기법중 하나로, 탐색하고 싶은 범위를 두 부분으로 분할해서 찾는 방법이다.
- 두 부분으로 계속 분할해서 조건에 맞는지 찾아가기 때문에, 시간 복잡도가 O(log n)으로 매우 빠른편
등차 수열이란?
- 연속된 두 항의 차이가 일정한 수열이다.( 두 항의 차이: 공차(d) )
- ex)
- 수열 A: 5, 7, 9, 11, . . . -> 공차(d)는 2
- 수열 B: 6, 1,-4, 9, . . . -> 공차(d)는 -5
버블티 좀 땡긴다..? 등갈비도..
공차~ 등차~ 영차~ 내 목표는 좋은 집, 차~
https://www.acmicpc.net/problem/11561
내 이름 오승택!
1. 테스트케이스 T를 입력받고 징검다리의 총 수 n을 T만큼 입력받기
t = int(input())
for _ in range(t):
n = int(input())
2. 이분 탐색 범위 정하기
start = 1
end = n
result = 0
3. 이분 탐색을 통해 밟을 수 있는 최대 징검다리의 총 수 구하기
while start <= end:
mid = (start + end) // 2
if ((mid + 1) * mid) // 2 <= n :
start = mid + 1
result = mid
else:
end = mid - 1
mid = (start + end) // 2
: 탐색 범위를 계속해서 반으로 줄이면서, 승택이가 밟을 수 있는 징검다리의 최대 수를 찾음.if ((mid + 1) * mid) // 2 <= n
: (mid * (mid + 1)) // 2
로 계산t = int(input())
for _ in range(t):
n = int(input())
start = 1
end = n
result = 0
while start <= end:
mid = (start + end) // 2
if ((mid + 1) * mid) // 2 <= n :
start = mid + 1
result = mid
else:
end = mid - 1
print(result)
🔥 어제 진행한 이분 탐색을 적용할 수 있는 문제가 나왔지만 등차 수열의 합 공식을 적용하는 생각을 하지 못해 다른 사람의 풀이를 보고 해결할 수 있었다.
🔥 등차 수열에 관한 기본 문제를 진행하고 이분 탐색에 대해 더 공부를 하자!