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;
}