2018. 1. 3. 21:22, 알고리즘/BOJ
https://www.acmicpc.net/problem/1654
amount[len]을 랜선 조각의 길이가 len일 때 랜선의 갯수라고 할 때 amount는 increasing sequence입니다.(monotonic임은 성립하지 않음) 즉, x > y이면 amount[x] >= amount[y]입니다.
이를 통해 amount[x] >= N인 최대의 x를 이분탐색으로 찾으면 되는데, 주의할 점이
i) amount[x] = N을 찾았다고 해서 x를 바로 출력하면 안됩니다. amount[x] = N을 만족하는 x는 여러개일 수 있고 그 중에서 최댓값을 출력해야하기 때문에 이분탐색을 계속 수행해야합니다.
ii) amount[x] = N인 x가 존재하지 않을 수도 있습니다.(ex - K = 2, N = 2, 랜선의 길이 : 1, 2)
iii) int 범위를 초과할 수 있습니다.(ex - 랜선의 갯수 : 1000개 랜선의 길이 : 2^31-1, 랜선 조각의 길이 : 1)
이 세가지를 조심해서 이분탐색을 수행하면 됩니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 2512번: 예산 (0) | 2018.01.03 |
---|---|
[BOJ] 1389번: 케빈 베이컨의 6단계 법칙 (0) | 2018.01.03 |
[BOJ] 1992번: 쿼드트리 (0) | 2018.01.03 |
[BOJ] 2631번: 줄세우기 (0) | 2018.01.03 |
[BOJ] 2003번: 수들의 합 2 (0) | 2018.01.03 |
[BOJ] 2468번: 안전 영역 (0) | 2018.01.03 |
Comments