正方形



しょかい

public long solution(int w, int h) {
    //가로로 한칸씩 움직이면서 대각선이 지나는 위치(y좌표)를 보고
    //지나가는 사각형의 개수를 계속 더해준다.
 
    //각 구간의 처음 지나가는 사각형의 위치
    //현재 대각선의 y좌표가 2.5라면 2 이후의 사각형부터 지나간다.
    int prevFlr = 0;
    int sumOfUnUsedSqr = 0;
    double division = h/(double)w;
 
    for(int i=1; i<=w; i++) {
        //한 칸 이동한 후 대각선의 y좌표를 포함한 사각형서부터
        //시작 위치 사각형까지 빼주면 한 칸 이동할 때 지나간 사각형의 개수다.
        sumOfUnUsedSqr += Math.ceil((division*i)-prevFlr;
        prevFlr = (int)Math.floor(division*i);
    }//for end
 
    return w*(long)h - sumOfUnUsedSqr;
}//solution() end

結果を見ると、テスト6万を除いて、すべて合格しました.

置換された草


どこでエラーが発生したかを考えるとjavaでエラーに関する演算が正しくないという提案が見られ、除算法とiにiを乗じてwで割ったものに変更された.
    public long solution(int w, int h) {
        int prevFlr = 0;
        int sumOfUnUsedSqr = 0;
 
        for(int i=1; i<=w; i++) {
            sumOfUnUsedSqr += Math.ceil((long)h*i/(double)w)-prevFlr;
            prevFlr = (int)Math.floor((long)h*i/(double)w);
        }//for end
 
        return w*(long)h - sumOfUnUsedSqr;
    }//solution() end