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

÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 프로그램은 오름차순으로 정렬된 정수형 배열 data(인덱스는 1부터 시작)에서 x 이상인 값이 처음 나타나는 인덱스를 lo에 구한다. x는 data의 마지막 요소 이하라고 한다. 프로그램 중의 【a】에 들어갈 것은?

integer: lo ← 1, hi ← length(data), mid
while (lo < hi)
  mid ← (lo + hi) ÷ 2
  if (data[mid] < x)
    lo ← 【a】
  else
    hi ← mid
  endif
endwhile
  1. Amid
  2. Bmid − 1
  3. Cmid + 1
정답과 해설 보기

정답: C. mid + 1

data[mid] < x이면 data[mid]와 그보다 앞의 요소는 모두 x 미만이므로, 답은 mid + 1 이후에 있습니다. 그렇지 않으면 data[mid] ≧ x이고 답은 mid 이전에 있으므로 hi ← mid로 합니다. lo ← mid + 1이면 범위는 매번 확실히 좁아지며, lo = hi가 된 곳이 답입니다. lo ← mid로 하면 lo와 hi가 이웃했을 때 mid = lo가 되어, data[mid] < x이면 범위가 좁아지지 않아 반복이 끝나지 않습니다.

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

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

  1. 요소 수 5인 정수형 배열 st와 정수형 변수 top으로 스택을 나타낸다. st의 요소는 모두 0, top은 0에서 시작한다. push(v)는 top에 1을 더한 후 st[top] ← v를 수행하고, pop()은 st[top]의 값을 반환한 후 top에서 1을 뺀다(st의 요소는 바꾸지 않는다). 다음 프로그램을 실행한 후의 top과 st의 조합은?
  2. 요소 수 4인 문자열형 배열 q를 원형으로 사용하는 큐가 있다. head와 tail의 초기값은 1이며, enq(v)는 q[tail] ← v 다음에 tail ← tail mod 4 + 1을 수행하고, deq()는 q[head]의 값을 반환한 다음에 head ← head mod 4 + 1을 수행한다. 다음 프로그램을 실행했을 때 "E"가 저장되는 q의 요소는?
  3. 다음 프로그램은 배열 next로 요소끼리 연결한 연결 리스트를, 인덱스 1인 요소부터 차례로 따라가며 출력한다. 배열의 인덱스는 1부터 시작한다. next의 값 0은 리스트의 끝을 나타낸다. 출력되는 값의 순서는?
  4. 다음 프로그램은 배열 next로 연결한 연결 리스트 A → C → E → D → B의 "C"(인덱스 3) 바로 뒤에 val[6]의 "F"를 삽입한 다음, 인덱스 1인 요소부터 차례로 따라가며 출력한다. 배열의 인덱스는 1부터 시작한다. next의 값 0은 리스트의 끝을 나타낸다. 출력이 A, C, F, E, D, B가 되도록 【a】에 넣을 처리는?
  5. 제어 변수를 5씩 늘리는 다음 for 문을 실행한 후의 c의 값은?