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

다음 프로시저 bubble은 정수형 배열 data를 오름차순으로 정렬하는 버블 정렬이다. swap(data, j, k)는 data[j]와 data[k]의 값을 교환하는 프로시저이며, 배열의 인덱스는 1부터 시작한다. 프로그램 중의 【a】에 들어갈 것은?

○bubble(integer array: data)
  integer: n ← length(data)
  for (i from n down to 2 step 1)
    for (j from 1 to 【a】 step 1)
      if (data[j] > data[j + 1])
        swap(data, j, j + 1)
      endif
    endfor
  endfor
  1. Ai
  2. Bn − i
  3. Ci − 1
정답과 해설 보기

정답: C. i − 1

바깥쪽 i는 그 회차의 주사에서 최댓값을 보내 넣을 위치(끝에서부터 n, n − 1, …, 2)를 나타냅니다. 안쪽에서는 data[j]와 data[j + 1]을 비교하므로, j의 종료값을 i − 1로 하면 data[i]까지의 이웃끼리를 비교하며 배열의 범위를 넘지 않습니다. i = n인 1회차에서 최댓값이 data[n]으로 옮겨지고, 다음은 data[n − 1]까지라는 식으로 주사하는 범위가 하나씩 좁아집니다. 【a】를 i로 하면 1회차에 data[n + 1]을 참조해 버립니다.

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

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

  1. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 프로그램은 오름차순으로 정렬된 정수형 배열 data(인덱스는 1부터 시작)에서 x 이상인 값이 처음 나타나는 인덱스를 lo에 구한다. x는 data의 마지막 요소 이하라고 한다. 프로그램 중의 【a】에 들어갈 것은?
  2. 요소 수 5인 정수형 배열 st와 정수형 변수 top으로 스택을 나타낸다. st의 요소는 모두 0, top은 0에서 시작한다. push(v)는 top에 1을 더한 후 st[top] ← v를 수행하고, pop()은 st[top]의 값을 반환한 후 top에서 1을 뺀다(st의 요소는 바꾸지 않는다). 다음 프로그램을 실행한 후의 top과 st의 조합은?
  3. 요소 수 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의 요소는?
  4. 다음 프로그램은 배열 next로 요소끼리 연결한 연결 리스트를, 인덱스 1인 요소부터 차례로 따라가며 출력한다. 배열의 인덱스는 1부터 시작한다. next의 값 0은 리스트의 끝을 나타낸다. 출력되는 값의 순서는?
  5. 다음 프로그램은 배열 next로 연결한 연결 리스트 A → C → E → D → B의 "C"(인덱스 3) 바로 뒤에 val[6]의 "F"를 삽입한 다음, 인덱스 1인 요소부터 차례로 따라가며 출력한다. 배열의 인덱스는 1부터 시작한다. next의 값 0은 리스트의 끝을 나타낸다. 출력이 A, C, F, E, D, B가 되도록 【a】에 넣을 처리는?