나의 발자취
[Ad-Hoc] 1431. Kids With the Greatest Number of Candies 본문
문제 링크
https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/description
문제 접근 방법
난이도가 Easy라 별도로 활용해야하는 알고리즘은 없었다. 굳이 따지자면 그리디?
고민한 부분
for 루프의 인덱스가 되는(candy + extraCandy) element가 해당 리스트(candies)에서 최댓값인지 식별을 해야 하는데, 이 방법을 어떻게 해야 복잡도를 최소화하는지 고민이 되었다.
해결한 방법
어차피 extraCandies를 더하는건 순차적이고, 더하게 되는 순간부터는 주어진 candies 리스트의 요소들과 비교하는 것이므로 처음부터 max값을 뽑아서 변수로 지정을 해놓는다.
주의사항
리스트에 append로 문자열을 추가하지 말고, boolean 조건식으로 append를 해주었다. (파이썬으로 풀었는데 파이썬에서는 True / False로 capitalized boolean을 사용하지만 그냥 문제는 true / false로 풀리길래)
코드
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
output = []
max_candy = max(candies)
for candy in candies:
output.append(candy + extraCandies >= max_candy)
return output
풀고 나서 (접근법, 사용되는 알고리즘 개념)
Ad Hoc
이라는 기법으로 푼다는건데
프로그래밍에서 말하는 애드혹 (ad-hoc, adhoc) 이란? 라틴어로 "for this particular purpose" 이다. 특정 상황에서만 정답이 되고 일반화될 수 없는 해답을 말한다. 그러므로 재사용되는 것이 거의 불가능한데, 쉽게 말해 유형화된 알고리즘이 아닌 창의적인 방법으로 푸는게 필요하단 것이다.
흠.. 정답지와 내가 접근방법은 똑같아서 좀 더 어려운 난이도가 나오면 그리디나, 구현이나, DP 이런식으로 굳이 분류가 될것같다.
'알고리즘' 카테고리의 다른 글
Two Pointers 기법이란? (Why / When / How to use) (0) | 2025.02.13 |
---|---|
334. Increasing Triplet Subsequence (0) | 2025.01.30 |
[그리디] 605. Can Place Flowers (2) | 2025.01.04 |
[Two Pointers] 345. Reverse Vowels of a String (0) | 2025.01.04 |
[String] 1768. Merge Strings Alternately (0) | 2025.01.01 |