복습 : 배열 기초
1.
배열의 인덱스는 0부터 시작한다.
2.
배열을 초기화하지 않으면 쓰레기값이 저장되어 있다.
→ 각 요소를 0으로 초기화해두는 것이 좋다. (ex: for문 순회, “{ 0, }” 이용)
// 배열 선언
int scores[10];
// 배열 초기화 (순회)
// [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
for(int i = 0; i < 10; i++){
scores[i] = i * 10;
}
C
복사
최솟값 찾기
int arr[10]; // 배열 선언
// 입력 : 5 2 1 3 7 6 9 8 4 10
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
int min = arr[0]; // 배열의 맨 처음 요소(0번째)가 최솟값이라고 가정
// 배열의 0번째 요소를 제외하고, 1번째 요소부터 min과 비교를 함
for (int i = 1; i < 10; i++) {
if (arr[i] < min) { // 현재 인덱스의 요소가 min보다 작다면
min = arr[i]; // 현재 인덱스의 요소를 min으로 지정함
}
}
printf("%d\n", min); // 출력 : 1
C
복사
비교할 숫자를 10개가 아닌, 사용자 입력에 따라 다르게 받을 수 없을까?
•
가정 : 숫자는 최대 100개까지 입력받을 수 있다.
int arr[100]; // 배열 선언 (받을 수 있는 최대 크기로 선언해둠)
int testcase; // 몇 개의 숫자를 받을까?
scanf("%d", &testcase);
// testcase의 수만큼 숫자를 입력받아서 배열에 저장한다.
for (int i = 0; i < testcase; i++) {
scanf("%d", &arr[i]);
}
int min = arr[0]; // 배열의 맨 처음 요소(0번째)가 최솟값이라고 가정
// 배열의 0번째 요소를 제외하고, 1번째 요소부터 min과 비교를 함
// testcase의 수만큼만 배열을 순회한다.
for (int i = 1; i < testcase; i++) {
if (arr[i] < min) { // 현재 인덱스의 요소가 min보다 작다면
min = arr[i]; // 현재 인덱스의 요소를 min으로 지정함
}
}
printf("%d\n", min);
C
복사
문제 (1)
•
2021년 1학기 기말고사 C 최대값 최소값 찾기
•
백준 2462 최댓값 (배열 인덱스 접근)
정렬
버블정렬
•
변수 swap
int a = 1;
int b = 7;
int tmp = a;
a = b;
b = tmp;
C
복사
tmp | 1 |
a | 1 |
b | 7 |
tmp | 1 |
a | 7 |
b | 7 |
tmp | 1 |
a | 7 |
b | 1 |
•
버블 정렬 알고리즘
int arr[5] = { 5,2,1,3,4 };
// 정렬 전 배열
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
// 정렬 후 배열
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
C
복사
i | j | arr |
0 | 0 | 5 2 1 3 4 → 2 5 1 3 4 |
1 | 2 5 1 3 4 → 2 1 5 3 4 | |
2 | 2 1 5 3 4 → 2 1 3 5 4 | |
3 | 2 1 3 5 4 → 2 1 3 4 5 |
i | j | arr |
1 | 0 | 2 1 3 4 5 → 1 2 3 4 5 |
1 | 1 2 3 4 5 → 1 2 3 4 5 | |
2 | (이하 동일) | |
3 | (이하 동일) |
문제 (2)
•
백준 2750 수 정렬하기 (꼭! 버블정렬을 이용해서 풀어봅시다! 함수 사용 금지!)