C언어 배열과 반복문
🔥 매회 출제 (priority 3)
🌱 왜 배우나
학생 30명의 점수를 저장하려고 score1, score2, ..., score30 변수를 따로 만들면, 평균 하나를 구하는 코드도 30줄이 된다. 30명이 300명이 되면 손댈 엄두가 안 난다.
배열은 “이름 하나에 여러 칸을 묶어 두자”는 아이디어다. 아파트 한 동에 101호, 102호, 103호… 가 줄지어 붙어 있는 것과 같다. 반복문(같은 동작을 여러 번 되풀이하는 구문)과 합치면 score[i]의 i만 바꾸며 모든 학생을 한 블록으로 처리할 수 있다. 많은 데이터를 단정하게 다루기 위해 배열과 반복문이 짝으로 나왔다.
📖 핵심 개념
배열(Array)은 같은 종류의 값을 메모리 위에 연속으로 나란히 저장하는 자료구조다. 메모리는 컴퓨터가 값을 저장해 두는 공간이다. 각 칸에는 0부터 시작하는 번호(인덱스)가 붙어 있어서, 번호만 알면 해당 자리에 바로 뛰어들 수 있다.
반복문(for, while)은 같은 코드 블록을 정해진 횟수나 조건에 맞춰 되풀이하는 문법이다. 배열과 함께 쓰면 정렬(크기 순으로 줄 세우기), 탐색(원하는 값 찾기), 집계(합, 평균)가 몇 줄 안에 끝난다.
시험에서는 이중 for문(반복문 안에 또 반복문)과 값 교환(swap) 패턴이 매회 출제된다. 버블 정렬이 그 대표다. 버블 정렬은 옆자리 두 개를 비교해 순서가 틀렸으면 맞바꾸는 방식이다. 이 작업을 끝까지 반복하면 큰 값이 거품처럼 뒤로 밀려 나간다.
🔍 시각화
배열 구조:
인덱스: [0] [1] [2] [3] [4]
┌────┬────┬────┬────┬────┐
a[] = │ 3 │ 1 │ 4 │ 1 │ 5 │
└────┴────┴────┴────┴────┘
버블 정렬 과정 (옆 두 개를 비교해 큰 값을 뒤로 보내기):
i=0: [1, 1, 3, 4, 5] ← 가장 큰 5 가 맨 뒤에 고정
i=1: [1, 1, 3, 4, 5] ← 4 가 뒤에서 두 번째에 고정
i=2: [1, 1, 3, 4, 5] ← 3 고정
i=3: [1, 1, 3, 4, 5] ← 모두 고정
값 교환(swap) 3단계 — 임시 변수 tmp 가 꼭 필요함:
tmp = a[j] a[j] 값을 잠깐 옮겨 둠
a[j] = a[j+1] a[j] 자리에 옆 값 덮어쓰기
a[j+1] = tmp 옆 자리에 옮겨 뒀던 값 넣기
↔️ 이웃 개념 구분
- 배열 vs 연결 리스트: 배열은 인덱스로 바로 접근 가능하지만 크기가 고정. 연결 리스트는 크기가 자유롭지만 번호로 바로 접근할 수 없음.
- 버블 정렬 vs 선택 정렬: 버블은 옆자리 두 개를 계속 비교·교환. 선택은 전체에서 최솟값을 찾아 맨 앞과 한 번 바꿈.
🔑 핵심 용어
- 배열 선언:
int a[5]또는int a[] = {1,2,3}. 같은 타입의 값을 연속으로 저장한다. 뒤 형태는 초기값 개수로 크기를 자동 결정 - 인덱스(index): 배열 각 칸에 붙는 번호.
a[0]부터a[n-1]까지. 범위를 벗어나면 예측 불가능한 오류가 난다 - 버블 정렬(Bubble Sort): 옆 두 값을 비교해 순서가 틀렸으면 교환하는 정렬. 이중 for문이 기본 틀
- 선택 정렬(Selection Sort): 남은 구간에서 가장 작은 값을 찾아 맨 앞과 바꾸는 정렬
- 교환(swap): 두 값을 맞바꾸는 패턴.
tmp = a[i]; a[i] = a[j]; a[j] = tmp;. tmp 없이 바로 덮어쓰면 값 하나가 사라진다
✅ 스스로 가르쳐보기
배열과 반복문의 짝을 처음 듣는 친구에게 설명한다면 어떻게 말하시겠어요? 아파트 호실, 사물함, 계란판 같은 일상 비유 하나로 둘의 관계를 한 문장으로 정리해 보세요.
체크포인트 — 아래를 말로 풀어 설명할 수 있는지 확인해 보세요.
- 인덱스가 0부터 시작하고 마지막이
n-1인 이유 - 값 교환에서 tmp가 없으면 왜 값 하나가 사라지는지
- 버블 정렬에서 바깥쪽 루프가 돌 때마다 안쪽 범위를 줄여도 되는 이유
- “배열 이름이 포인터처럼 동작한다”는 말이 실제로 무슨 뜻인지
🎯 기출 포인트
- 2025-1회: 배열 정렬(삽입 정렬 변형) 후 결과 출력. 답: 4 BACDE
- 매회 출제: 이중 for문 + 배열 교환 패턴은 실기의 절대 단골
- 트레이싱 팁: 반복 한 바퀴마다 배열 상태를 표로 기록하면 실수를 줄인다
- 주의:
a[j]와a[j+1]을 비교할 때 j가 배열 끝을 넘지 않는지 꼭 확인
🔗 연결 개념
- C언어 포인터 기초
pg-algorithm-001