LeetCode/Top Interview 150

228. Summary Ranges

hyunkookim 2024. 12. 2. 17:33

228. Summary Ranges

 

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        if not nums:  # nums가 비어있는 경우
            return []

        l = 0  # 왼쪽 포인터
        res = []
        
        for r in range(1, len(nums)):
            if nums[r] != nums[r-1] + 1:  # 연속되지 않은 숫자를 발견
                # 범위를 저장
                if l == r - 1:
                    res.append(f"{nums[l]}")
                else:
                    res.append(f"{nums[l]}->{nums[r-1]}")
                l = r  # 새로운 범위 시작

        # 마지막 범위 처리
        """
        루프가 종료되었을 때 마지막 범위를 처리하지 않음
        루프는 중간에서 범위가 끊어질 때만 결과를 저장합니다. 
        하지만 nums 배열이 끝날 때에도 범위를 저장해야 합니다.
        예를 들어, nums = [0, 1, 2, 4, 5, 7]일 경우:
        [0, 1, 2]는 올바르게 처리되지만, 
        마지막 범위 [4, 5]와 숫자 7이 결과에 포함되지 않습니다.
        """
        if l == len(nums) - 1:  # 남은 숫자가 하나라면
            res.append(f"{nums[l]}")
        else:  # 마지막 범위라면
            res.append(f"{nums[l]}->{nums[-1]}")

        return res

 

 

여기서는 마지막 범위를 처리하기 위해 루프 종료 후 남은 범위를 처리하는 것이 "문제의 핵심"입니다.

'LeetCode > Top Interview 150' 카테고리의 다른 글

155. Min Stack  (0) 2024.12.02
20. Valid Parentheses  (0) 2024.12.02
289. Game of Life  (0) 2024.12.02
73. Set Matrix Zeroes  (0) 2024.12.02
219. Contains Duplicate II  (0) 2024.12.01