[JS] 프로그래머스 / 코딩테스트 입문 / 최빈값 구하기

2023. 1. 26. 13:27· 코딩 테스트/programmers
목차
  1. 문제
  2. 메모
  3. 정답

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


메모

  • Map: Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억한다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있다.
  • Spread syntax(...): 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수(함수로 호출할 경우)나 요소(배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장시킬 수 있다.
  • Array.length: 배열의 길이를 반환한다. 반환값은 부호 없는 32비트 정수형이며, 배열의 최대 인덱스보다 항상 크다. length 속성에 값을 설정할 경우 배열의 길이를 변경한다.
  • 증가 연산자(++): 피연산자를 증가(1을 더함)시키고 연산자의 위치에 따라 증가하기 전이나 후의 값을 반환한다.
  • Array.prototype.indexOf(): 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.
  • Array.prototype.lastIndexOf(): 배열에서 주어진 값을 발견할 수 있는 마지막 인덱스를 반환하고, 요소가 존재하지 않으면 -1을 반환한다. 배열 탐색은 fromIndex에서 시작하여 뒤로 진행한다.

정답

function solution(array) {
  let obj = {};

  // 객체에 값이 없으면 1로 선언하고, 없으면 1을 더한다
  array.map(x => {
    obj[x] === undefined ? (obj[x] = 1) : obj[x]++;
  });

  // 값 배열의 최댓값
  let max = Math.max(...Object.values(obj));

  // 값 배열을 키 배열의 최댓값으로 필터링
  let valueArr = Object.values(obj).filter(x => x === max);

  // 객체에서 값 배열의 최댓값과 일치하는 키 찾기
  let answer = Number(Object.keys(obj).find(x => obj[x] === max));

  // 최댓값인 키가 2개 이상이면 -1 출력, 그렇지 않으면 key 출력
  return valueArr.length > 1 ? -1 : answer;
}
function solution(array) {
  let map = new Map();

  // Map 객체 초기화
  for (i = 0; i <= Math.max(...array); i++) {
    map.set(i, 0);
  }

  // array 배열의 원소값과 일치하는 Map 객체의 key를 증가시킨다
  for (i = 0; i < array.length; i++) {
    map.set(array[i], map.get(array[i]) + 1);
  }

  // Map 객체의 value만 모아서 배열로 만든다
  let arr = Array.from(map.values());

  // 최대값 산출
  let max = Math.max(...arr);

  // 최대값이 하나면 max, 여러 개 중복되면 -1 출력
  if (arr.indexOf(max) !== arr.lastIndexOf(max)) {
    return -1;
  } else {
    return arr.indexOf(max);
  }
}

console.log(solution([1, 1, 2, 2])); // -1

저작자표시 비영리 변경금지 (새창열림)
  1. 문제
  2. 메모
  3. 정답
'코딩 테스트/programmers' 카테고리의 다른 글
  • [JS] 프로그래머스 / 코딩테스트 입문 / 피자 나눠 먹기 (1)
  • [JS] 프로그래머스 / 코딩테스트 입문 / 분수의 덧셈
  • [JS] 프로그래머스 / 코딩테스트 입문 / 짝수는 싫어요
  • [JS] 프로그래머스 / 코딩테스트 입문 / 중앙값 구하기
카버
카버
카버의 코딩일기카버 님의 블로그입니다.
카버
카버의 코딩일기
카버
  • All (414)
    • JavaScript (36)
    • CSS (1)
    • TypeScript (6)
    • React (17)
    • Redux (6)
    • Next.js (13)
    • Gatsby (2)
    • 코딩 테스트 (305)
      • programmers (238)
      • Baekjoon (51)
      • CroCoder (15)
    • ETC (28)
      • Error (9)
      • CS (8)
      • Terminal (2)
      • GitHub (1)
hELLO · Designed By 정상우.v4.2.2
카버
[JS] 프로그래머스 / 코딩테스트 입문 / 최빈값 구하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.