문제 20정답을 고른 뒤 해설을 펼쳐보세요.

다음 C 프로그램의 출력 결과는?

#include <stdio.h>

void rotate(int *a, int n, int k) {

k %= n;

while (k--) {

int first = a[0];

int i;

for (i = 0; i < n - 1; i++) {

a[i] = a[i + 1];

}

a[n - 1] = first;

}

}

int main(void) {

int arr[] = {1, 2, 3, 4, 5};

rotate(arr, 5, 7);

int i;

for (i = 0; i < 5; i++) {

printf("%d ", arr[i]);

}

return 0;

}

  1. ①
    1 2 3 4 5
    정답
  2. ②
    3 4 5 1 2
    정답
  3. ③
    4 5 1 2 3
    정답
  4. ④
    5 1 2 3 4
    정답
정답·해설 펼치기정답·해설 접기
정답 ②배열 회전

정답: 공식 최종정답 기준 · 검수 방식

정답 근거

정답은 ②입니다. rotate 함수는 k %= n으로 k = 7 % 5 = 2가 됩니다. while 반복마다 첫 원소를 저장하고 나머지를 한 칸씩 앞으로 당긴 뒤 첫 원소를 맨 뒤에 넣으므로, 배열을 왼쪽으로 한 칸 회전합니다. 2번 회전하면 [1, 2, 3, 4, 5] → [2, 3, 4, 5, 1] → [3, 4, 5, 1, 2]가 되어 3 4 5 1 2가 출력됩니다.

보기별 검토

✗① 회전하지 않은 상태로, k가 5의 배수일 때의 결과입니다.

✓② 왼쪽으로 2칸 회전한 결과이므로 옳습니다.

✗③ 왼쪽으로 3칸(또는 오른쪽으로 2칸) 회전한 결과입니다.

✗④ 오른쪽으로 1칸(왼쪽으로 4칸) 회전한 결과입니다.

풀이 요령 · 관련 개념

풀이 요령: 회전 횟수는 먼저 n으로 나눈 나머지로 줄이고, 회전 방향(첫 원소를 뒤로 보내면 왼쪽)을 확인합니다. 왼쪽 k칸 회전 결과는 「k번째 원소부터 시작」하는 배열입니다.