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

Python으로 연속된 짝수·홀수 인덱스 요소를 교환하는 프로그램 만들기

숫자로 이루어진 리스트 nums가 주어졌을 때, 연속된 짝수 인덱스의 요소끼리 서로 교환하고, 연속된 홀수 인덱스의 요소끼리 서로 교환한 결과 리스트를 반환하는 프로그램을 Python으로 작성해 보겠습니다.

예를 들어 입력이 nums = [8,5,3,4,8,9,3,6,4,7]이라면, 짝수 인덱스(0, 2, 4, 6)끼리 그리고 홀수 인덱스(1, 3, 5, 7)끼리 두 칸 간격으로 교환되어 출력은 [3, 4, 8, 5, 3, 6, 8, 9, 4, 7]이 됩니다.

문제 해결 접근 방법

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

  • 인덱스 i를 0부터 시작하여 (nums의 길이 − 2) 미만일 때까지 4씩 증가시키며 반복합니다.
    • i + 2가 nums의 길이보다 작으면, nums[i]와 nums[i + 2]의 값을 서로 교환합니다.
    • i + 3이 nums의 길이보다 작으면, nums[i + 1]과 nums[i + 3]의 값을 서로 교환합니다.
  • 모든 교환이 완료된 nums를 반환합니다.

여기서 핵심은 한 번의 반복(4칸 간격) 안에서 짝수 인덱스 쌍(i, i+2)과 홀수 인덱스 쌍(i+1, i+3)을 동시에 처리한다는 점입니다. 이렇게 하면 리스트를 한 번만 순회하면서도 모든 교환을 효율적으로 수행할 수 있으며, 시간 복잡도는 O(n)입니다.

예제 코드

더 나은 이해를 위해 다음 구현 예제를 살펴보겠습니다.

def solve(nums):
    for i in range(0, len(nums) - 2, 4):
        if i + 2 < len(nums):
            nums[i], nums[i + 2] = nums[i + 2], nums[i]
        if i + 3 < len(nums):
            nums[i + 1], nums[i + 3] = nums[i + 3], nums[i + 1]

    return nums

nums = [8,5,3,4,8,9,3,6,4,7]
print(solve(nums))

입력

[8,5,3,4,8,9,3,6,4,7]

출력

[3, 4, 8, 5, 3, 6, 8, 9, 4, 7]