본문 바로가기

Algorithm/문제풀이

Codility Lesson6 - NumberOfDiscIntersections

🔍 문제


 

 

NumberOfDiscIntersections coding task - Learn to Code - Codility

Compute the number of intersections in a sequence of discs.

app.codility.com

 

✏️ 풀이 - JS


처음 주어진 배열 A로 원을 그린다. 배열 인덱스가 중심점, 반지름은 배열의 값이다. 원을 그렸을 때 겹치는 원의 개수를 구하면 된다. 이번에도 역시나 나는 이중 for문에서 헤어나오지 못했다... 아래와 같이 풀어서 정확도는 100%지만 역시나 performance에서는 62%가 나와서 총 81%가 나왔다. 시간복잡도는 N(N**2)😓

일단 논리는 처음 배열 A에서 index를 기준으로 원 그리기의 startPoint와 endPoint를 구한다. 그리고 나서 시작점이 가장 왼쪽에있는 원부터 차례대로 정렬해준다. 가장 왼쪽의 원부터 차례로 자신의 원과 겹치는 원이 있는지 확인 후 intersectionCnt++ 해주었다.

function solution(A) {
    let intersectionCnt = 0;
    let pointArr = A.map((radius, i) => [i-radius, i+radius]); //시작점, 끝점 배열

    pointArr.sort((a, b) => a[0] - b[0]); //가장 왼쪽에 있는 원부터 정렬

    for(let i = 0; i < A.length-1; i++) {
        let baseEnd = pointArr[i][1];

        for(let j = i+1; j < A.length; j++) {

            if(pointArr[j][0] <= baseEnd) {
                intersectionCnt++;
                if(intersectionCnt > 100000000) return -1;
            }
        }
    }

    return intersectionCnt;

}

이렇게 풀고나서 자고일어나서 다시 보는데 아직 모르겠다ㅎㅎㅎ추후 다시 도전 해볼 예정

'Algorithm > 문제풀이' 카테고리의 다른 글

Codility Lesson7 - Fish  (0) 2019.08.11
Codility Lesson7 - Brackets  (0) 2019.08.11
Codility Lesson6 - Triangle  (0) 2019.08.10
Codility Lesson6 - Distinct  (0) 2019.08.10
Codility Lesson6 - MaxProductOfThree  (0) 2019.08.09