[코딜리티] codility lesson 5 Frefix Sums - PassingCars100%

문제.

Programming language: 
A non-empty zero-indexed array A consisting of N integers is given. The consecutive elements of array A represent consecutive cars on a road.
Array A contains only 0s and/or 1s:
  • 0 represents a car traveling east,
  • 1 represents a car traveling west.
The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.
For example, consider array A such that:
A[0] = 0 A[1] = 1 A[2] = 0 A[3] = 1 A[4] = 1
We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).
Write a function:
int solution(int A[], int N);
that, given a non-empty zero-indexed array A of N integers, returns the number of pairs of passing cars.
The function should return −1 if the number of pairs of passing cars exceeds 1,000,000,000.
For example, given:
A[0] = 0 A[1] = 1 A[2] = 0 A[3] = 1 A[4] = 1
the function should return 5, as explained above.
Assume that:
  • N is an integer within the range [1..100,000];
  • each element of array A is an integer that can have one of the following values: 0, 1.
Complexity:
  • expected worst-case time complexity is O(N);
  • expected worst-case space complexity is O(1), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.
Copyright 2009–2017 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

풀이.

// you can also use imports, for example:
// import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        int Q = 0 ;
        int PassingCars = 0;
        for( int i : A) Q +=i;
        for( int i : A){
            Q -= i;
            if(i == 0) PassingCars+=Q;
            if(PassingCars > 1000000000) return -1;
        }
        
        return PassingCars ;
    }
}

설명.

동쪽으로 간 차 는 0 이라고 하고
서쪽으로 간 차 는 1 이라고 한다.
차들이 어디로 갔는지 기록한 배열 A가 있다.

동쪽으로 갔다가 그 이후 서쪽으로 간 쌍을 만들고 그 합을 구하여라.
쌍의 합이 10억 을 초과 하면 -1을 되돌린다.

에고 설명이 더 어렵네...

무얼 의도한 문제인지는 잘 모르겠으나 무얼 하라는지는 명확한 것 같음.

어려운 수학 문제도 아닌거 같고... 내 풀이 대로 해도 100% 이고.
잘 만든건지 아닌지 모르겠음!

댓글

이 블로그의 인기 게시물

[코딜리티] codility lesson 5 Frefix Sums - MinAvgTwoSlice 100%

구글 블로그 ( blogspot ) 라벨 위젯 을 카테고리 처럼 만들기

[코딜리티] codility lesson 7 Stacks and Queues - StoneWall 100%