[프로그래머스/JS] LV.0 - 최빈값 구하기

JS·2023년 2월 19일
0

알고리즘

목록 보기
11/26

🏄‍문제

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

🕐제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

👨‍💻입출력 예 설명

numer1denom1
[1, 2, 3, 3, 3, 4]3
[1, 1, 2, 2]-1
[1]1

입출력 예 #1

  • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.

입출력 예 #2

-[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.

입출력 예 #3

-[1]에는 1만 있으므로 최빈값은 1입니다.

🧐나의 풀이

function solution(array) {
  let sortedArray = array.sort((a, b) => a - b);
  let cnt = 0;
  let choi = -1; //최빈값
  let choiRepeatCnt = 0; //최빈값이 될때 몇 번 반복했는지
  let repeatCnt = 0; // 현재 같은 숫자가 몇번 등장
  let beforeNumber = -1; //지금 보고 있는 숫자 어떤 숫자
  let isDupChoi = false;

  while (cnt < array.length) {
    if (beforeNumber !== array[cnt]) {
      repeatCnt = 1;
    } else {
      repeatCnt = repeatCnt + 1;
    }
    if (repeatCnt === choiRepeatCnt) {
      if (choi !== array[cnt]) {
        isDupChoi = true;
      }
    }
    if (repeatCnt > choiRepeatCnt) {
      choi = array[cnt];
      choiRepeatCnt = repeatCnt;
      isDupChoi = false;
    }
    beforeNumber = array[cnt];
    cnt = cnt + 1;
  }
  if (isDupChoi) return -1;

  return choi;
}
// 메모리 너무 잡아먹지만 이런 연습 더욱 해보기

🥳다른 사람의 풀이

//1 map사용
function solution(array) {
    let m = new Map();
    for (let n of array) m.set(n, (m.get(n) || 0)+1);
    m = [...m].sort((a,b)=>b[1]-a[1]);
    return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}


//2 
function solution(array) {
  // array의 최댓값만큼의 길이를 가진 새로운 배열 생성
  let newArray = new Array(Math.max(...array) + 1).fill(0);
  // array 반복문을 통해, 해당 값에 해당하는 index의 값 += 1
  for (let i = 0; i < array.length; i++) {
    newArray[array[i]] += 1;
  }
  // newArray의 최댓값에 해당 하는 index 출력
  // 만약 indexOf와 lastIndexOf가 지칭하는 값이 같으면, -1 출력 (중복인 경우 확인)
  if (
    newArray.indexOf(Math.max(...newArray)) !==
    newArray.lastIndexOf(Math.max(...newArray))
  ) {
    return -1;
  } else {
    return newArray.indexOf(Math.max(...newArray));
  }
}
// arr.fill(value[, start[, end]])

profile
신입 FE 개발자

0개의 댓글

관련 채용 정보