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 |