댄코 - 댄싱코딩

[BOJ] 1300 K번째 수 본문

코딩/알고리즘

[BOJ] 1300 K번째 수

Jk hila 2017. 8. 20. 01:54

문제보기

이분 탐색으로 left = 1, right = k를 시작으로 mid를 구하고 그 mid보다 작거나 같은 수의 갯수를 cnt에 저장한다.


cnt를 구하는 이유는 k번째 수를 구하기 위해서 k보다 작은 수의 갯수를 구할 필요가 있기 때문이다.


cnt(mid보다 작거나 같은 수)는 

min( mid / i, N)  --- (i 는 1부터 N까지)

를 전부 더한값이다.


그 이유는 a[i][j]에서 i행은 i의 배수들로 이루어져 있기 때문.

그때, i의 배수들이 N개를 넘을 수 없으므로 min함수를 이용한다.


그렇게 나온 cnt값(mid보다 작거나 같은 수의 갯수)이 k보다 작다면

left 값을 올리고

그렇지 않다면

result 에 mid값을 대입한 후 right값을 내린다.







'코딩 > 알고리즘' 카테고리의 다른 글

[BOJ] 9663 N-Queen  (0) 2017.08.29
[BOJ] 1654 랜선 자르기  (0) 2017.08.20
[BOJ] 11052 붕어빵 판매하기  (0) 2017.08.14
[BOJ] 14499 주사위 굴리기  (0) 2017.08.01
[BOJ] 11055 가장 큰 증가 부분 수열  (0) 2017.07.27
Comments