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
- job parameter
- aop proxy
- JSONObject 분할
- spring batch 변수 공유
- abstractpagingitemreader
- 트랜잭션 분리
- step 여러개
- 아이템 리더 커스텀
- spring batch 5
- 스프링배치 엑셀
- 읽기 작업과 쓰기 작업 분리
- executioncontext 변수 공유
- 선언적 트랜잭션 관리
- executioncontext
- step 값 공유
- 스프링배치 csv
- 아이템 리더 페이징 처리
- JSON 분할
- stepexecutionlistener
- 마이바티스 트랜잭션
- JSONArray 분할
- JSON 분리
- flatfileitemwriter
- 스프링배치 메타테이블
- 스프링 배치 5
- step 사이 변수 공유
- api 아이템 리더
- Spring Batch
- 스프링 트랜잭션 관리
- mybatis
Archives
- Today
- Total
ebson
boj.kr/1300 K번째 수 (gold2) 파이썬 풀이 본문
1. lo를 0, hi를 k으로 초기화한다.
2. lo가 hi보다 작거나 같으면 아래 3-6을 반복한다.
3. mid 를 (lo+hi)//2 으로 초기화한다.
4. 1부터 N까지 반복하면서 mid//i와 N중 작은 값을 cnt에 더하기함으로서 mid보다 작거나 같은 수의 개수를 구한다.
5. mid보다 작거나 같은 수의 개수 cnt가 k와 같거나 더 크면, hi를 mid-1으로 갱신하고 ans변수에 mid를 저장한다.
6. cnt가 k보다 작으면, lo를 mid+1으로 갱신한다.
7. ans를 출력한다.
N = int(input())
k = int(input())
lo = 0
hi = k
while lo <= hi:
mid = (lo + hi) // 2
cnt =0
for i in range(1, N+1):
cnt += min(mid//i, N)
if cnt >= k:
hi = mid-1
ans = mid
else:
lo = mid+1
print(ans)
모든 수를 검사할 필요 없이 lo를 0으로 , hi를 k로 초기화하고 mid보다 작거나 같은 수들의 개수가 k에 가장 가까울 때까지 이분탐색한다. 왜냐하면 k보다 작거나 같은 수들의 개수가 항상 k개 보다 많기 때문이다.
참고출처
"#396 백준 파이썬 [1300] K번째 수 - 이분탐색", claude-u.tistory.com, 2020년 2월 11일 수정, 2023년 5월 28일 접속, https://claude-u.tistory.com/449
'ALGORITHM STUDY WITH PYTHON > Binary Search' 카테고리의 다른 글
boj.kr/1939 중량제한 (gold3) 파이썬 풀이 (0) | 2023.05.29 |
---|---|
boj.kr/2343 기타 레슨 (silver1) 파이썬 풀이 (0) | 2023.05.28 |
boj.kr/2470 두 용액 (gold5) 파이썬 풀이 (1) | 2023.05.27 |
boj.kr/12015 가장 긴 증가하는 부분 수열 2 (gold2) 파이썬 풀이 (0) | 2023.05.27 |
boj.kr/2110 공유기 설치 (gold4) 파이썬 풀이 (0) | 2023.05.23 |
Comments