문제 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 2 3 4 5정답
- ②3 4 5 1 2정답
- ③4 5 1 2 3정답
- ④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번째 원소부터 시작」하는 배열입니다.