PostAddsense


BadClock Topcoder



public class BadClock
{
    public double nextAgreement (String trueTime, String skewTime, int hourlyGain) {
        double tSec = Double.parseDouble(trueTime.substring(0,2))*3600 + Double.parseDouble(trueTime.substring(3,5))*60 + Double.parseDouble(trueTime.substring(6));
        double sSec = Double.parseDouble(skewTime.substring(0,2))*3600 + Double.parseDouble(skewTime.substring(3,5))*60 + Double.parseDouble(skewTime.substring(6));

        double sum = (hourlyGain < 0) ? sSec - tSec : tSec - sSec;
        if (sum < 0) sum += 43200;    // 12 hours are 43,200 seconds.

        return Math.abs(sum / hourlyGain);
    }
}


Explanation

실제 시간(trueTime)과 꼬인 시간(skewTime)의 차를 시간당 얻는 초(hourlyGain)로 나눠준다. 작은 시간에서 큰 시간을 뺄 때 음수가 나오므로 이 경우만 처리해주면 된다. 실제 시간과 꼬인 시간 둘 다 초로 바꾼 후 두 시간의 차를 구한다. 차가 음수이면 43200초를 더해준다. 시계의 최대 시는 12이기 때문이다.