[LeetCode] Find Lucky Integer in an Array

준규·2022년 10월 12일
0

숫자 배열 arr가 주어질 때 자신의 값과 같은 횟수만큼 중복되는 숫자를 lucky integer라고 한다.

lucky integer 중 가장 큰 값을 리턴하는 문제이다

Example을 보자

예시를 보면 배열이 [2,2,2,3,3] 과 같이 주어진다면 2는 3번 반복되므로 lucky integer가 아니고 3도 3번반복되어야 lucky integer지만 2번 반복되므로 해당되지 않는다

만약 배열안에 lucky integer가 존재하지 않는다면 -1을 리턴하면 된다.

const findLucky = function (arr) {
  let result = [-1];
  let hash = {};

  arr.sort((a, b) => a - b);

  for (let i = 0; i < arr.length; i++) {
    hash[arr[i]] ? (hash[arr[i]] = hash[arr[i]] + 1) : (hash[arr[i]] = 1);
  }

  for (let key in hash) {
    if (hash[key] === parseInt(key)) result.push(key);
  }

  return Math.max(...result);
};

먼저 arr을 오름차순으로 sort를 해준다음

hash 객체에 배열안 숫자의 중복 횟수를 기록하였다.

for문을 돌면서 만약 hash안에 현재 숫자의 value가 존재한다면 1을 증가시켜주고 아니라면 value 값을 1로 저장해주었다.

숫자들의 중복 횟수를 체크 하였으니 객체 순회를 하면서 key와 value 값이 같은 key를 result에 넣어주었다.

만약 lucky integer가 존재하지 않는다면 result = [-1]일 것이므로 result의 최댓값을 리턴해주면 답이된다.

submit을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글