Algorithms/LeetCode

[LeetCode] 1431. Kids With the Greatest Number of Candies

junhwa100 2024. 9. 19. 12:16

1. 문제 이해

candies 리스트가 주어진다.(길이가 n)

candies[i]는 i번째 아이가 가지고 있는 사탕의 수를 의미한다.

리스트에 포함되지 않은 엑스트라 사탕의 수도 주어진다.

 

길이가 n인 boolean 리스트를 리턴해야 한다.

i번째 아이에게 모든 엑스트라 사탕을 준다.

그 아이가 모든 아이들 중 가장 많은 사탕을 가지게 될 경우 리스트의 i번째 값은 True가 되고, 그렇지 않을 경우 False가 된다.

 

 

2. 풀이 과정

반복문으로 i번째 아이에게 엑스트라 사탕을 준다.

Python의 index 함수를 이용하여 i번째 아이가 모든 아이들 중 가장 많은 사탕을 가지게 되었는지 확인한다.

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        ans = []
        for i in range(len(candies)):
            candies[i] += extraCandies
            if candies.index(max(candies)) == i:
                ans.append(True)
            else:
                ans.append(False)
            candies[i] -= extraCandies
        return ans

 

리스트 내에서 최댓값이 여러 개 있더라도 첫 번째로 등장하는 최댓값의 인덱스를 리턴하는 문제가 발생한다.

 

다른 방법을 사용한다.

원래 candies 리스트의 최댓값을 구한다.

candies[i] + extraCandies가 최댓값보다 크거나 같다면 True를 ans에 추가한다.

for candy in candies:
    if candy + extraCandies >= max_candies:
        ans.append(True)
    else:
        ans.append(False)

 

 

3. 전체 코드

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        max_candies = max(candies)
        ans = []
        
        for candy in candies:
            if candy + extraCandies >= max_candies:
                ans.append(True)
            else:
                ans.append(False)
        
        return ans

 

 

4. 생각할 점

- Python의 index(max()) 함수는 최댓값이 여러 개 있을 때 첫 번째로 등장하는 최댓값의 인덱스만을 리턴한다.

 

 

5. 출처

- https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/