카테고리 없음
[코테] 프로그래머스 Lv0 최빈값 구하기
찹쌀뗙
2023. 3. 22. 14:05
반응형
최빈값 구하기
총 3개의 방법으로 구해보겠습니다
1.
function solution(arr) {
let counts = {};
let maxCount = 0;
let mode = -1;
다음 세 줄은 세 가지 변수를 정의합니다. counts는 배열에 있는 각 값의 개수를 저장하는 데 사용되는 빈 객체이고, maxCount는 0으로 초기화되어 발견된 가장 높은 개수를 추적하는 데 사용되며, mode는 -1로 초기화되고 발견된 가장 빈번한 값을 추적하는 데 사용됩니다.
for (let i = 0; i < arr.length; i++) {
counts[arr[i]] = (counts[arr[i]] || 0) + 1;
if (counts[arr[i]] > maxCount) {
maxCount = counts[arr[i]];
mode = arr[i];
} else if (counts[arr[i]] === maxCount) {
mode = -1;
}
}
return mode;
}
- 이 루프는 배열의 각 값을 반복하고 이에 따라 counts 개체를 업데이트합니다.
- counts[arr[i]] = (counts[arr[i]] || 0) + 1; 행은 counts 객체의 현재 값을 증가시킵니다. 현재 값이 아직 counts 개체에 없으면 먼저 해당 값을 0으로 초기화합니다.
- 다음 두 개의 if 문은 현재 값의 카운트가 지금까지 찾은 maxCount보다 큰지 확인합니다. 그렇다면 그에 따라 maxCount 및 mode를 업데이트합니다. 현재 값의 카운트가 maxCount와 같으면 mode를 -1로 설정하여 여러 모드가 있음을 나타냅니다.
- 발견된 가장 빈번한 값을 반환하거나 모드가 여러 개인 경우 -1을 반환합니다.
2.
let counts = arr.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
let maxCount = 0;
let mode = -1;
- 이 코드는 솔루션 1과 유사하지만 루프를 사용하여 counts 개체를 업데이트하는 대신 reduce 메서드를 사용하여 동일한 작업을 수행합니다.
- reduce 메서드는 배열의 각 값을 반복하고 각 값의 개수를 포함하는 단일 개체를 반환합니다.
- maxCount 및 mode 변수는 솔루션 1과 동일한 값으로 초기화됩니다.
for (let val in counts) {
if (counts[val] > maxCount) {
maxCount = counts[val];
mode = Number(val);
} else if (counts[val] === maxCount) {
mode = -1;
}
}
return mode;
}
- 이 루프는 1과 동일한 논리를 사용하여 counts 개체의 각 속성을 반복하고 이에 따라 maxCount 및 mode를 업데이트합니다.
- 발견된 가장 빈번한 값을 반환하거나 모드가 여러 개인 경우 -1을 반환합니다.
3
let counts = new Map();
let maxCount = 0;
let mode = -1;
- 3개의 변수를 초기화합니다. counts는 배열에 각 값의 개수를 저장하는 새로운 Map 개체이고, maxCount는 0으로 초기화되어 발견된 가장 높은 개수를 저장하며, mode는 다음과 같이 초기화됩니다. -1 가장 자주 찾은 값을 저장합니다.
for (let val of arr) {
counts.set(val, (counts.get(val) || 0) + 1);
if (counts.get(val) > maxCount) {
maxCount = counts.get(val);
mode = val;
} else if (counts.get(val) === maxCount) {
mode = -1;
}
}
return mode;
}
- 이 루프는 배열의 각 값을 반복하고 이에 따라 counts 개체를 업데이트합니다.
- counts.set(val, (counts.get(val) || 0) + 1); 행은 counts 객체의 현재 값을 증가시킵니다. 현재 값이 아직 counts 개체에 없으면 || 연산자를 사용하여 먼저 해당 값을 0으로 초기화합니다.
- 다음 두 개의 if 문은 현재 값의 카운트가 지금까지 찾은 maxCount보다 큰지 확인합니다. 그렇다면 그에 따라 maxCount 및 mode를 업데이트합니다. 현재 값의 카운트가 maxCount와 같으면 mode를 -1로 설정하여 여러 모드가 있음을 나타냅니다.
세 가지 방법 중 reduce를 사용하는 2번 방법이 시간적인 측면에서 가장 효율적이다.
반응형