관리 메뉴

솜씨좋은장씨

[leetCode] 1394. Find Lucky Integer in an Array (Python) 본문

Programming/코딩 1일 1문제

[leetCode] 1394. Find Lucky Integer in an Array (Python)

솜씨좋은장씨 2020. 11. 11. 01:31
728x90
반응형

Given an array of integers arr, a lucky integer is an integer which has a frequency in the array equal to its value.

Return a lucky integer in the array. If there are multiple lucky integers return the largest of them. If there is no lucky integer return -1.

 

Example 1:

Input: arr = [2,2,3,4]
Output: 2
Explanation: The only lucky number in the array is 2 because frequency[2] == 2.

Example 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.

Example 3:

Input: arr = [2,2,2,3,3]
Output: -1
Explanation: There are no lucky numbers in the array.

Example 4:

Input: arr = [5]
Output: -1

Example 5:

Input: arr = [7,7,7,7,7,7,7]
Output: 7

 

Constraints:

  • 1 <= arr.length <= 500
  • 1 <= arr[i] <= 500

Solution

from collections import Counter

class Solution:
    def findLucky(self, arr: List[int]) -> int:
        answer = -1
        cnt = Counter(arr).items()
        
        answer_check = [ item[0] for item in cnt if item[0] == item[1] ]
        
        if answer_check != []:
            answer = max(answer_check)
            
        return answer

Solution 해설

이 문제는 리스트 속에 존재하는 숫자와 그 숫자가 존재하는 빈도수가 서로 같은 숫자들 중에

가장 큰 숫자를 Luckey Number 라 하며 해당 숫자를 찾는 문제입니다.

 

먼저 collections의 Counter를 활용하여 빈도수를 구해준 다음 ( 숫자, 빈도수 ) 형태로 리스트에 저장될 수 있도록

.items() 를 활용하여 변환하여 줍니다.

 

그 다음 위에서 만든 리스트를 활용하여 빈도수와 숫자가 같은 숫자들만 answer_check에 남겨둡니다.

 

만약 answer_check 가 비어있는 리스트라면 Lucky Number 가 없는 것이므로 -1 을 return

answer_check가 비어있지 않다면 answer_check 리스트에서 가장 큰 값이 Lucky Number이므로

해당 값을 return 하도록 합니다.

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

 

Comments