[COS Pro 1급 Python] 2차 기출문제 8) 규칙에 맞는 배열 구하기

정은·2023년 8월 11일

COS Pro 1급

목록 보기
19/26
post-thumbnail

문제 8)

자연수가 들어있는 리스트가 주어질 때, 다음 규칙에 따라 새로운 리스트를 만들려고 합니다.

  • 주어진 리스트의 첫 번째 원소를 새로운 리스트의 첫 번째 원소에 넣습니다.
  • 주어진 리스트의 마지막 원소를 새로운 리스트의 두 번째 원소에 넣습니다.
  • 계속해서 주어진 리스트의 남아있는 원소중 가장 앞에있는 원소와 가장 뒤에있는 원소를 번갈아 가져와 새로운 리스트에 순서대로 넣습니다.
  • 주어진 리스트에 더이상 원소가 남아있지 않을 때까지 위 과정을 반복합니다.

자연수가 들어있는 리스트 arr가 매개변수로 주어질 때, 위 과정을 수행해서 만든 새로운 리스트를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.


매개변수 설명

자연수가 들어있는 리스트 arr가 solution 함수의 매개변수로 주어집니다.

  • arr의 길이는 1 이상 1,000 이하입니다.
  • arr의 원소는 1 이상 10,000 이하의 자연수입니다.

return 값 설명

문제에 주어진 과정을 수행해서 만든 새로운 리스트를 return 해주세요.


예시
arrreturn
[1, 2, 3, 4, 5, 6][1, 6, 2, 5, 3, 4]
예시 설명

처음에 주어진 리스트는 [1, 2, 3, 4, 5, 6]입니다. 주어진 규칙에 맞게 새로운 리스트를 만드는 과정은 다음과 같습니다.

처음 리스트 arr새로운 리스트
[1, 2, 3, 4, 5, 6][ ]
[2, 3, 4, 5, 6][1]
[2, 3, 4, 5][1, 6]
[3, 4, 5][1, 6, 2]
[3, 4][1, 6, 2, 5]
[4][1, 6, 2, 5, 3]
[ ][1, 6, 2, 5, 3, 4]

주어진 문제 8) 코드

def solution(arr):
    left, right = 0, len(arr) - 1
    idx = 0
    answer = [0 for _ in range(len(arr))]
    while left <= right:
        if left % 2 == 0:
            answer[idx] = arr[left]
            left += 1
        else:
            answer[idx] = arr[right]
            right -= 1
        idx += 1
    return answer

#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution 함수만 수정하세요.
arr = [1, 2, 3, 4, 5, 6]
ret = solution(arr)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은 ", ret, " 입니다.")

Solution

주어진 문제 8) Solution 코드

이번엔 빈칸 채우기, 함수 작성 문제가 아니라 코드 오류를 찾는 문제이다.
주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하는 문제이다.

def solution(arr):
    left, right = 0, len(arr) - 1
    idx = 0
    answer = [0 for _ in range(len(arr))]
    while left <= right:
        if idx % 2 == 0: # 수정
            answer[idx] = arr[left]
            left += 1
        else:
            answer[idx] = arr[right]
            right -= 1
        idx += 1
    return answer

#아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래 코드는 잘못된 부분이 없으니, solution 함수만 수정하세요.
arr = [1, 2, 3, 4, 5, 6]
ret = solution(arr)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은 ", ret, " 입니다.")

  • 원본 리스트의 앞쪽 항목들을 answer 리스트의 짝수 인덱스 항목으로, 원본 리스트의 뒤쪽 항목들은 answer 리스트의 홀수 인덱스 항목으로 저장한다.

  • 이전의 코드는 left의 값이 짝수 이면 원본 리스트의 앞쪽 항목을 추가하고 홀수 이면 원본 리스트의 뒤쪽 항목으로 추가한 코드였다. → 이를 수정하기 위해 left 변수를 idx 변수로 고쳐 원본 리스트를 읽는 인덱스 값이 짝수인지 홀수인지 파악할 수 있는 코드로 변경하였다.

profile
정니의 이런거 저런거 기록 일지 😛

0개의 댓글