Search
Duplicate
🍰

6회차

날짜
2022/05/16
수행 내용
배열

복습 : 배열 기초

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 수 정렬하기 (꼭! 버블정렬을 이용해서 풀어봅시다! 함수 사용 금지!)