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점!
'이론 > 문제풀이' 카테고리의 다른 글
[Codility] Lesson6- CountDiv (java) (0) | 2018.08.09 |
---|---|
[KaKao 신입공채 1차 코딩테스트] 비밀 지도(난이도: 하) - java (0) | 2018.08.09 |
[Codility] Lession 4 - FrogRiverOne (0) | 2018.08.02 |
[카카오 코드페스티벌 본선 1] 단체사진 찍기 (C++) (0) | 2018.08.02 |
[Codility] Lesson 3- PermCheck (0) | 2018.08.01 |