Codility Lesson8. Leader - Dominator

세나정·2023년 4월 25일
0
post-thumbnail

Tasks

https://app.codility.com/programmers/lessons/8-leader/dominator/

내 풀이

// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
    let max = 0;
    let 나온횟수 = 1;

    if (A.length === 0) return -1

    A.sort( (a, b) => a-b)
    // -1 2 3 3 3 3 3 4

    // 값이 들어올 때마다 나온횟수의 값을 늘려줌
    // 나온횟수가 전 애의 나온횟수보다 크면 나온횟수를 업데이트
    for(i=1; i<A.length; i++) {
        if (A[i-1] === A[i]) {
            나온횟수 += 1
            max = A[i-1]
        }
    }

    if (나온횟수 > A.length/2) {
        return A.findIndex(v => v === max)
    } else if (나온횟수 <= A.length/2) {
        return -1
    }

}

배열의 로직은 맞는데 결과가 41%가 나왔다. 여러 경우들을 고려하지 못해서 발생한 것이었다. 그래서 다른 사람들의 풀이를 쳐보니 객체로 푸는 것이 적은 키 값을 상대하기에 훨씬 좋은 것 같다.

다른 사람 풀이

function solution(A) {
    let value = null;
    let nCnt = {};

    for (let i = 0; i < A.length; i++) {
        // 배열 인덱스값 하나하나를 객체의 키로 넣어주고 
        // 같은 값이 나올 때마다 +1
        nCnt[A[i]] =  nCnt[A[i]] ? nCnt[A[i]] + 1 : 1;
        
        if (nCnt[A[i]] > A.length / 2) {
            // 배열의 인덱스 값에 해당하는 객체의 value값이 길이의  절반보다 크다면 
            // 그때에 인덱스가 value 
            value = A[i];
        }
    };

    return value !== null ? A.indexOf(value) : -1; 
}
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글