Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 연속된 동일 요소를 하위 리스트로 묶는 프로그램

숫자로 이루어진 리스트 nums가 주어졌을 때, 같은 값이 연속해서 등장하는 요소들을 하나의 하위 리스트로 묶어야 합니다. 단, 리스트에 한 번만 나타나는 값이라도 반드시 별도의 하위 리스트로 존재해야 한다는 점에 유의하세요.

예를 들어 입력이 nums = [5, 5, 2, 7, 7, 7, 2, 2, 2, 2]라면, 출력은 [[5, 5], [2], [7, 7, 7], [2, 2, 2, 2]]가 됩니다. 여기서 앞부분의 2와 뒷부분의 2들이 서로 다른 그룹으로 분리되는 것을 확인할 수 있습니다.

문제 해결 접근 방법

이 문제는 다음과 같은 단계로 해결할 수 있습니다.

  • 빈 리스트 확인: nums가 비어 있다면 빈 리스트를 반환합니다.
  • 초기화: 첫 번째 요소를 담고 있는 하위 리스트로 결과 리스트 result를 시작하고, 인덱스 변수 j를 0으로 설정합니다.
  • 순회 및 그룹화: 두 번째 요소부터 끝까지 반복하면서, 현재 요소가 바로 앞의 요소와 다르면 새로운 빈 하위 리스트를 추가하고 j를 1 증가시킵니다. 이후 현재 요소를 result[j]에 추가합니다.
  • 결과 반환: 모든 요소를 처리한 후 result를 반환합니다.

아래의 구현 예시를 통해 더 자세히 이해해 보겠습니다.

예제 코드

class Solution:
    def solve(self, nums):
        if not nums:
            return []
        result = [[nums[0]]]
        j = 0
        for i in range(1, len(nums)):
            if nums[i] != nums[i - 1]:
                result.append([])
                j += 1
            result[j].append(nums[i])
        return result

ob = Solution()
nums = [5, 5, 2, 7, 7, 7, 2, 2, 2, 2]
print(ob.solve(nums))

입력

[5, 5, 2, 7, 7, 7, 2, 2, 2, 2]

출력

[[5, 5], [2], [7, 7, 7], [2, 2, 2, 2]]

마무리

이 알고리즘은 리스트를 한 번만 순회하므로 시간 복잡도는 O(n)이며, 결과를 저장하기 위한 공간 복잡도 역시 O(n)입니다. 연속된 데이터를 그룹으로 묶어야 하는 다양한 실무 상황, 예를 들어 로그 정리나 데이터 전처리 과정에서 유용하게 활용할 수 있는 기본적인 패턴입니다.