-
[LeetCode] 1394. Find Lucky Integer in an Array알고리즘 문제 풀이 2021. 5. 14. 11:27
출처: https://leetcode.com/problems/find-lucky-integer-in-an-array/
Find Lucky Integer in an Array - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제
정수 배열
arr
에서 행운의 정수는 정수 값과 그 값이 배열 안에서 등장하는 빈도수가 동일한 정수이다.배열에서 행운의 정수 를 반환하라. 만약 여러개 존재하면 가장 큰 정수를 반환하고, 없다면 -1을 반환하라.
예제
Input: arr = [2,2,3,4] Output: 2 Explanation: The only lucky number in the array is 2 because frequency[2] == 2.
Input: arr = [1,2,2,3,3,3] Output: 3 Explanation: 1, 2 and 3 are all lucky numbers, return the largest of them.
풀이
배열에서 행운의 정수를 찾기 전, 배열을 내림차순으로 정렬한다. 배열 내에서 행운의 정수가 여러개 존재하더라도 처음 찾는 행운의 정수를 바로 반환하기 위함.
두 변수
val
과freq
를 사용하여 행운의 변수를 찾기 시작.val
: 행운의 정수인지 체크하고자 하는 정수 값freq
:val
의 확인된 빈도 수
val = arr[0], freq = 1
로 초기화를 진행하고, 반복문을 이용해서val
와arr[i]
의 값을 비교하여val
과freq
를 업데이트한다.val == arr[i]
:freq += 1
val != arr[i]
: 행운의 정수 체크 +val = arr[i], freq = 1
설정- 이전 단계에서 정렬을 수행했기 때문에, 동일한 정수는 한 곳에 모여 있음.
- 값이 달라졌다면 이후 인덱스에서는 현재 값이 등장하지 않음을 뜻하기에 이 단계에서 행운의 정수를 체크
function findLucky(arr) { arr.sort((a, b) => b - a); let val = arr[0], freq = 1; for (let i = 1; i < arr.length; i++) { if (arr[i] != val) { if (freq == val) return val; val = arr[i]; freq = 0; } freq +=1; } if (freq == val) return val; return -1; }
Github: 1394.js
opwe37/Algorithm-Study
Contribute to opwe37/Algorithm-Study development by creating an account on GitHub.
github.com
'알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 873. Length of Longest Fibonacci Subsequence (0) 2021.05.18 [LeetCode] 189. Rotate Array (0) 2021.05.17 [LeetCode] 798. Smallest Rotation with Highest Score (0) 2021.05.13 [LeetCode] 1631. Path With Minimum Effort (0) 2021.05.12 [LeetCode] 748. Shortest Completing Word (0) 2021.05.11