본문 바로가기
Algorithm/문제풀이

[Codility] EquiLeader (Easy) by javascript - AVAILABLE LESSONS 8

by 썸머워즈 2022. 4. 20.
반응형

▷ 문제 : AVAILABLE LESSONS 8 - EquiLeader (Easy)

 

EquiLeader coding task - Learn to Code - Codility

Find the index S such that the leaders of the sequences A[0], A[1], ..., A[S] and A[S + 1], A[S + 2], ..., A[N - 1] are the same.

app.codility.com

▷ 해결 날짜 : 2022.04.20
▷ 소요 시간 : 1시간 30분
▷ 풀이 과정 :

자꾸 효율성 부분에서 0점이 나와 시간이 걸렸다.

이 문제는 Lesson 8 Leader 문제답게 리더로 두 그룹을 나누고 그 리더가 같은지 확인하는 것이다.

 

우선 첫 번째로 리더를 먼저 구해주었다.

리더를 구하면서 최댓값을 변수에 저장시켜놓고.

 

이제 두 그룹을 나눠서 비교를 해줘야 하는데, 리더가 누군지 알기 때문에 A(N),... A(S)까지 각각의 리더가 몇 개 분포되어있는지를 배열에 저장시켜준다.

 

그리고 마지막으로 두 그룹의 리더가 동일한지만 비교해주면 문제는 해결된다.

 

▷ 구현

function solution(A) {
    let max = 0;
    let leader = 0;
    const map = new Map();
    A.forEach(key => {
        let num = map.has(key) ? map.get(key) + 1 : 1;
        if(num > max){
            max = num;
            leader = key;
        }
        map.set(key, num);
    });

    let count = 0;
    let leaderCnts = Array(A.length).fill(0);
    for(let i = 0 ; i < A.length ; i++){
        if(A[i] === leader) count++;
        leaderCnts[i] = count;
    }

    let answer = 0;
    for(let i = 1 ; i < A.length ; i++){
        let max1 = leaderCnts[i - 1];
        let max2 = max - max1;
        if(max1 > i / 2 && max2 > (A.length - i) / 2) answer++;
    }
    return answer;
}


▷ 복기 :

후... 어렵다 어려워

이중 for문을 쓰면 대부분 효율성에서 별로 좋지 않은것 같다.

반응형


댓글

TOP