리트코드 알고리즘/리트코드 easy

(간단한 코드)리트코드 2239. Find Closest Number to Zero

문학적 딥러닝 2024. 12. 2. 22:09

 

이 문제는 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)해주면 된다.