프로그래밍의 기초(의사 코드 트레이스)

배열 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
  1. A{6, 5, 4, 3, 2, 1}
  2. B{6, 5, 4, 4, 5, 6}
  3. 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)로 하여 각 쌍을 한 번씩만 교환합니다.

이 분야 연습하기 분야로 돌아가기

프로그래밍의 기초(의사 코드 트레이스)의 다른 문제

  1. 배열의 인덱스는 1부터 시작한다. 다음 프로그램을 실행한 후의 배열 a의 내용은?
  2. 배열의 인덱스는 1부터 시작한다. 이웃한 요소를 비교하는 다음 프로그램을 실행한 후의 c의 값은?
  3. m[i, j]는 2차원 배열 m의 i행 j열의 요소를 나타내며, 인덱스는 1부터 시작한다. 다음 프로그램을 실행한 후의 s의 값은?
  4. 4행 5열의 2차원 배열 m의 요소를 다음 프로그램으로 요소 수 20인 배열 b로 옮긴다. m[i, j]는 i행 j열의 요소를 나타내며, 인덱스는 1부터 시작한다. m[3, 2]가 대입되는 b의 인덱스는?
  5. 배열의 인덱스는 1부터 시작하며, +는 문자열을 연결한다. 다음 프로그램을 실행한 후의 r의 값은?