2014年7月20日日曜日

Lesson 3: PassingCars (Passing Cars)

https://codility.com/programmers/lessons/3
Lesson 3: Passing Carsの答えがこちらになります。

西に進んでいる車は、反対側からくる東にすすんでいる車の全てにあうことになります。

ですから、東に進んでいる車の数を数えつつ、配列を調べていき、東に進んでいる来るまであれば、「東に進んでいる車のカウンタ」を一つ増やします。

西に進んでいる車があったら、「すれ違う車のカウンタ」に、「東に進んでいる車のカウンタ」を足せばよいのです。

で、忘れ易いのが1,000,000,000以上カウントが増えたら-1を返せという仕様ですね。
codilityの環境はintの範囲内の値なので、カウンタその他はint型でいいですね。

この方針で100%がでます。







int solution(int A[], int N) 
{
    int cnt = 0;
    int cntCarsTravelingEast = 0;
    
    int i;
    for (i = 0; i < N; i++){
        if (A[i] == 0){
            cntCarsTravelingEast++;
        }
        else {
            cnt += cntCarsTravelingEast;             
            if (cnt > 1000000000){
                return -1;
            }
        }
    }
    
    return cnt;
}

0 件のコメント:

コメントを投稿