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 | 31 |
Tags
- JobExecutionAlreadyRunningException
- 스프링 리액티브 프로그래밍
- JSON 분리
- 마리아디비
- spring reactive programming
- 스프링 배치 공식문서
- JSONObject 분할
- 마이바티스 트랜잭션
- git stage
- Meta Table
- 성능개선
- JSON 분해
- 스프링 웹플럭스
- nonblocking
- 무시하기
- spring webflux
- jar 소스보기
- 날짜형을 문자형으로
- batchInsert
- JSON 분할
- JSONArray 분할
- 폐기하기
- 스테이지에 올리기
- org.json
- 문자형을 날짜형으로
- str_to_date
- multi update
- date_format
- 스프링 배치 메타 테이블
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #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