이 문제는 0에 제일 가까운 숫자를 고르는 것이고, 만약에 0과 동일한 차이가 있는 숫자가 2개이면, 더 큰 쪽을 고르는 문제다.
문제 자체는 쉬워보이지만, 이것을 처음 접했을 때는 어떻게 접근해야 하는 막막함이 있었다.
class Solution:
def findClosestNumber(self, nums: List[int]) -> int:
min=float('inf')
for num in nums:
a = abs(min)
if abs(num) < a:
min = num
elif num == a:
if num>min:
min=num
return min
이건 내가 짠 코드가 아니다, 나도 그냥 타인의 코드를 참조 했을 뿐이다.
우선 처음에 왜
min=float('inf')
이렇게 무한을 주었을까?
처음에 혼자 풀 때는 적당히 큰 숫자 min = 10 정도를 주었는데, [-1000000, 10000000]과 같은 리스트가 들어오면 어쩔건데?라고 문제가 답했다(에러를 냈다).
그래서, 그냥 무한히 큰 수치를 시작으로 둔다.
보통 for문에서 리스트의 이름 뒤에 s가 붙어있으면, s를 뺀 이름으로 자주 붙인다.(여기서는 nums라는 리스트가 있으니까, num으로 받아온다)
그리고 변수 이름이 생각이 나지 않아, 그냥 a로 현재 가지고 있는 "가장 작은 값의 거리 = abs(min)"를 만들어주고, nums 리스트에서 가져온 숫자 "num의 거리 = abs(num)"와 비교를 한다(abs()는 절대값을 의미한다).
이 과정을 최소거리 최신화(update 업데이트) -> min 값을 업데이트 한다고 표현한다. (첫번째 if절 까지의 과정)
이제 elif는 [-1,1]과 같이 두 값이 숫자 0과의 거리가 같을 경우를 의미한다, 혹은 [1,1]과 같이 동일한 경우에는 elif 안에 있는 if를 통과하지 못하므로, min값 자체에 손을 대지 않은 것과 같다. -> 문제 없다.
그리고 마지막으로 for문이 한번 다 돌면, 모든 숫자들을 비교해봤으니, 최종 min값을 반환(return)해주면 된다.
'리트코드 알고리즘 > 리트코드 easy' 카테고리의 다른 글
(간단한 코드)리트코드 228. Summary Ranges (0) | 2024.12.10 |
---|---|
(간단한 코드)리트코드 14. Longest Common Prefix (0) | 2024.12.08 |
(간단한 코드)리트코드 121. Best Time to Buy and Sell Stock (0) | 2024.12.08 |
(간단한 코드)리트코드 392. Is Subsequence (0) | 2024.12.08 |
(간단한 코드)리트코드 1768. Merge Strings Alternately (0) | 2024.12.03 |