프로그래밍의 기초(의사 코드 트레이스)
배열 a의 요소를 역순으로 뒤집을 생각으로 다음 프로그램을 작성했다. 배열의 인덱스는 1부터 시작한다. 실행한 후의 a의 내용은?
integer array: a ← {1, 2, 3, 4, 5, 6}
integer: n ← 6, t
for (i from 1 to n step 1)
t ← a[i]
a[i] ← a[n − i + 1]
a[n − i + 1] ← t
endfor
- A{6, 5, 4, 3, 2, 1}
- B{6, 5, 4, 4, 5, 6}
- C{1, 2, 3, 4, 5, 6}
정답과 해설 보기
정답: C. {1, 2, 3, 4, 5, 6}
반복 안의 3행은 a[i]와 a[n − i + 1]의 값을 교환합니다. i = 1~3에서 앞쪽 절반과 뒤쪽 절반이 교환되어 일단 {6, 5, 4, 3, 2, 1}이 됩니다. 그런데 종료값이 n이므로 i = 4~6에서도 a[4]와 a[3], a[5]와 a[2], a[6]과 a[1]을 다시 교환하여 원래 순서로 돌아가 버립니다. 역순으로 하려면 종료값을 n ÷ 2(n = 6이면 3)로 하여 각 쌍을 한 번씩만 교환합니다.