반응형
1. 속도 개선 아이디어
예제를 다시 분석해보자.
| vector A | 마주치는 차량 |
| A[0] = 0 | A[1], A[3], A[4] |
| A[1] = 1 | |
| A[2] = 0 | A[3], A[4] |
| A[3] = 1 | |
| A[4] = 1 |
A[0]이 마주치는 차량과 A[2]가 마주치는 차량이 일부 겹친다.
이유는 A[2]가 마주치는 차량은, A[0]도 마주치기 때문이다.
즉, 차량을 각각 짝지을 필요 없이, 1을 만날 때마다, 앞에있는 0의 갯수만큼 더해주면 된다.
A[0] ↔ A[1]이 마주치는 차량 1대
A[0]/A[2] ↔ A[3]이 마주치는 차량 2대
A[0]/A[2] ↔ A[4]이 마주치는 차량 2대
2. 코드 (C++)
int solution(vector<int> &A) {
int cnt = 0;
int east_cars = 0;
for(size_t i = 0; i < A.size(); i++)
{
if(A[i] == 0) east_cars++; //동쪽으로 여행하는 차량 수
else cnt += east_cars;
if(cnt > 1000000000) return -1;
}
return cnt;
}
3. 결과

반응형
'Algorithm Problem > Codility' 카테고리의 다른 글
| Lesson 5. Perfix Sums - CountDiv #1 (0) | 2024.10.21 |
|---|---|
| Lesson 5. Perfix Sums - PassingCars #4 (번외-prefix sums) (0) | 2024.10.13 |
| Lesson 5. Perfix Sums - PassingCars #2 (속도 개선-1) (0) | 2024.10.13 |
| Lesson 5. Perfix Sums - PassingCars #1 (0) | 2024.10.13 |
| Lesson 4. Counting Elements - MissingInteger (0) | 2024.10.11 |