Problem
Problem URL : 달팽이는 올라가고 싶다
Answer Code [18. 02. 10]
#include <iostream>
#define ll long long
using namespace std;
int main() {
ll a,b,v;
cin >> a >> b >> v;
ll c = a - b;
ll l=1,r=1e9;
// r = v / c; // [1]
ll ans;
while (l <= r) {
ll mid = (l+r) >> 1; // [2]
ll value = ( mid-1 ) * c + a;
if( value >= v ){
ans = mid;
r = mid - 1;
}
else{
l = mid + 1;
}
}
cout << ans << endl;
return 0;
}
Code Review
[1]
r = v / c;
이런식으로 r값을 초기화 해주면
코너 케이스같은거에 걸려서 틀릴 수 있다.
(실제로 틀렸다…)
그러니 넉넉하게
r = 1e9처럼 초기화를 해주자.
[2]
int mid로 선언을 하면
l = max_int - 1
r = max_int일 때
mid는 int형을 벗어나기 때문에 터진다 !