알고리즘/해결

LeetCode1431. Kids With the Greatest Number of Candies

언클린 2020. 5. 18. 13:31
728x90

1. 문제(원본)

Given the array candies and the integer extraCandies, where candies[i] represents the number of candies that the ith kid has.

For each kid check if there is a way to distribute extraCandies among the kids such that he or she can have the greatest number of candies among them. Notice that multiple kids can have the greatest number of candies.

 

Example 1:

Input: candies = [2,3,5,1,3], extraCandies = 3 Output: [true,true,true,false,true] Explanation: Kid 1 has 2 candies and if he or she receives all extra candies (3) will have 5 candies --- the greatest number of candies among the kids. Kid 2 has 3 candies and if he or she receives at least 2 extra candies will have the greatest number of candies among the kids. Kid 3 has 5 candies and this is already the greatest number of candies among the kids. Kid 4 has 1 candy and even if he or she receives all extra candies will only have 4 candies. Kid 5 has 3 candies and if he or she receives at least 2 extra candies will have the greatest number of candies among the kids.

Example 2:

Input: candies = [4,2,1,1,2], extraCandies = 1 Output: [true,false,false,false,false] Explanation: There is only 1 extra candy, therefore only kid 1 will have the greatest number of candies among the kids regardless of who takes the extra candy.

Example 3:

Input: candies = [12,1,12], extraCandies = 10 Output: [true,false,true]

 

Constraints:

  • 2 <= candies.length <= 100
  • 1 <= candies[i] <= 100
  • 1 <= extraCandies <= 50

2. 문제

여러명의 아이가 각각의 사탕을 가지고 있다. 각각 추가적으로 사탕을 주어서 원래 가장 많이 가지고 있던 아이의 사탕 수 보다 많아지는지 참 거짓의 여부를 구하라 

3. 나의 답

class Solution {
    func kidsWithCandies(_ candies: [Int], _ extraCandies: Int) -> [Bool] {
        let greatestValue = candies.sorted().last ?? 0
        return candies.map { $0 + extraCandies >= greatestValue }
    }
}

4. 다른 유저의 답

#1

class Solution {
    func kidsWithCandies(_ candies: [Int], _ extraCandies: Int) -> [Bool] {
        var max = Int.min
        for candy in candies {
            if max < candy {
                max = candy
            }
        }
        
        var result: [Bool] = []
        for candy in candies {
            result.append(candy + extraCandies >= max)
        }
        
        return result
    }
}

#2

class Solution {
    func kidsWithCandies(_ candies: [Int], _ extraCandies: Int) -> [Bool] {
        let max = candies.max()!
        return candies.map { $0 + extraCandies >= max }
    }
}

5. 마무리

어려운 문제는 아니었지만 다른 유저들의 답을 보았을 때 .max()의 사용을 보았다. 내가 사용한 sorted.last보다 더 효율적이라고 생각한다. 문제를 풀 때는 생각하지도 못했는데 좀 더 배열과 친해지기 위해 노력해야 할 것 같다.

728x90