본문 바로가기

이론/문제풀이

[Codility] Lesson5- PassingCars

class Solution {
 public int solution(int[] A) {
     // write your code in Java SE 8
	 int count=0;
	 int count_zero=0;
	 for(int i=0; i<A.length; i++) {
		 if(A[i]==0) {
			count_zero++;
		 }
		 if(A[i]==1) {
			 count+=count_zero*1;
		 }
		 if(count>1000000000) return -1;
	 }
	 return count;
 }
}
간단한 논리만 파악하면 쉬운 문제이다.
0이 먼저 나온 뒤 1이 나오면 그 0과 짝지을 수 있기 때문에 카운트를 해주면 되는 문제인데,

0이 나온 뒤 1이 나오고 카운팅 할 때, 직전에 나온 0 말고 그 전에 나온 0과도 짝지어줘야 한다.
즉, 0이 나올 때마다 카운트를 해주고, 1이 나오면 현재까지 나온 0의 수만큼 1을 더해주면 된다.

for문 중첩으로 하면 아주 쉬울테지만, 시간 복잡도 제한이 O(n) 이기 때문에 위와 같이 풀어주어야한다.
문제에 나와있는 조건도 잘 체크해주면 100점!