숫자로 이루어진 리스트 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]