Gidhub BE Developer

[BOJ] 달팽이는 올라가고 싶다

2018-02-10
goodGid

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형을 벗어나기 때문에 터진다 !


Index