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

파이썬(Python)으로 리스트를 양쪽 끝에서 짜내어 단일 요소로 만드는 프로그램

숫자로 구성된 리스트 nums가 주어졌다고 가정해 봅시다. 이 리스트를 왼쪽과 오른쪽 양 끝에서 교차하듯 짜내어(압축하여) 마지막에는 단 하나의 요소만 남도록 만들어야 하며, 각 단계별 리스트의 상태를 모두 반환해야 합니다.

예를 들어 입력이 nums = [10, 20, 30, 40, 50, 60]이라면 결과는 다음과 같습니다.

[[10, 20, 30, 40, 50, 60],
  [30, 30, 40, 110],
  [60, 150],
  [210]]

동작 원리 이해하기

첫 단계에서는 맨 왼쪽의 두 요소(10 + 20 = 30)와 맨 오른쪽의 두 요소(50 + 60 = 110)를 각각 더하고, 가운데 요소들(30, 40)은 그대로 유지하여 [30, 30, 40, 110]을 만듭니다. 같은 과정을 반복하면 [60, 150]이 되고, 마지막으로 남은 두 요소를 합쳐 [210]이라는 단일 요소 리스트가 완성됩니다.

해결 절차

이 문제는 다음 단계를 거쳐 해결할 수 있습니다.

  • ret을 초기 리스트 nums를 유일한 요소로 갖는 리스트로 초기화합니다.
  • nums의 길이가 1보다 큰 동안 다음을 반복합니다.
    • 길이가 2라면: nums := [nums[0] + nums[1]]
    • 길이가 3이라면: nums := [nums[0] + nums[1] + nums[2]]
    • 그 외의 경우: nums := [nums[0] + nums[1]] + nums[2:-2] + [nums[-2] + nums[-1]] — 앞의 두 요소를 합친 값, 인덱스 2부터 뒤에서 세 번째 요소까지의 중간 부분, 뒤의 두 요소를 합친 값을 차례대로 연결합니다.
  • 매 반복마다 갱신된 numsret의 끝에 추가합니다.
  • 반복이 종료되면 ret을 반환합니다.

구현 예제

다음 구현 예제를 통해 전체 동작을 더 명확하게 이해할 수 있습니다.

class Solution:
    def solve(self, nums):
        ret = [nums]
        while len(nums) > 1:
            if len(nums) == 2:
                nums = [nums[0] + nums[1]]
            elif len(nums) == 3:
                nums = [nums[0] + nums[1] + nums[2]]
            else:
                nums = [nums[0] + nums[1]] + nums[2:-2] + [nums[-2] + nums[-1]]
            ret.append(nums)
        return ret

ob = Solution()
print(ob.solve([10, 20, 30, 40, 50, 60]))

입력

[10, 20, 30, 40, 50, 60]

출력

[[10, 20, 30, 40, 50, 60], [30, 30, 40, 110], [60, 150], [210]]