반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
예전 풀이
function solution(array) {
if(array.length === 1) return array[0];
const obj = {}
for(let i = 0; i < array.length; i++){
obj[array[i]] = (obj[array[i]] || 0) + 1;
}
let max_num = -Infinity;
let result = -1;
const valuesArr = Object.values(obj);
const max = Math.max(...valuesArr);
if(valuesArr.indexOf(max) !== valuesArr.lastIndexOf(max)) return -1;
for(let key in obj) {
if(obj[key] > max_num) {
max_num = obj[key];
result = +key;
}
}
return result;
}
최근 다시 풀이
- 중복 없이 오름차순으로 정렬한 배열 = sortedArray
- 오름차순으로 숫자의 개수를 저장하는 배열 생성 = answer
- → 중복 없는 숫자(요소의 개수)만큼 배열 만들고, 거기에 0으로 채움
- array의 크기만큼 for문을 돌리고,
- array의 각 요소를 sortedArray에서 몇 번째 인덱스 인지 찾고
- answer의 그 인덱스에 +1을 더함
- answer의 최댓값을 구함 = max
- answer에서 max가 여러개라면 -1를 반환
- answer에서 max를 담은 index === 최빈값의 인덱스
- → sortedArray[최빈값의 인덱스] === 최빈값!
function solution(array) {
if(array.length === 1) return array[0];
const sortedArray = [...new Set(array)].sort((x, y) => x - y)
const answer = new Array(sortedArray.length).fill(0);
for(let i = 0; i < array.length; i++) {
const idx = sortedArray.indexOf(array[i]);
answer[idx] += 1;
}
const max = Math.max(...answer);
if(answer.indexOf(max) !== answer.lastIndexOf(max)) return -1;
return sortedArray[answer.indexOf(max)];
}
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230325] 최솟값 만들기 (0) | 2023.03.26 |
---|---|
[230323] 둘만의 암호 (0) | 2023.03.26 |
[230323] 유한소수 판별하기: toFixed (0) | 2023.03.26 |
[230322] 등수 매기기: indexOf (0) | 2023.03.26 |
[230321] 특이한 정렬 (0) | 2023.03.26 |