728x90
이번 포스트에서 다룰 예제 유형은 배열의 중복된 숫자 검사입니다. 간단한 알고리즘 2가지를 통해 구현해보았습니다.
바로 코드를 참고해주세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#pragma warning(disable:4996)
#include <stdio.h>
/* 문제 5-2 */
int main() {
int A[100];//A 원소 값들을 입력받는 배열 선언
int B[100];//B 원소 값들을 입력받는 배열 선언
int sum_ab[200]; // A와 B 원소들을 합친 배열
int a = 0;
int samecntA = 0, samecntB = 0;
int j = 0;
while (1) {// A배열에 원소들을 담습니다
scanf("%d", &A[a]);
if (A[a] < 0) break;
a++;//A배열의 크기를 알기 위해 변수 a를 사용합니다
}
int b = 0;
while (1) {// B배열에 원소들을 담습니다
scanf("%d", &B[b]);
if (B[b] < 0) break;
b++;//B배열의 크기를 알기 위해 변수 b를 사용합니다
}
int k = 0;
//중복검사 알고리즘 1
for (int i = 0; i < a; i++) { // A배열에 대하여 중복이 없는 것들만 sum_ab배열에 담습니다.
int p = 0;
//중복검사파트
while (p < i && A[p] != A[i]) p++;
if (p == i) {//중복이 없다면
sum_ab[k] = A[i];
k++;
}
}
//중복검사 알고리즘2
for (int i = 0; i < b; i++) {// B배열에 대하여 중복이 없는 것들만 sum_ab배열에 담습니다.
samecntB = 0;
for (int p = 0; p < k; p++) {
if (sum_ab[p] == B[i]) samecntB++;// sum_ab배열의 k인덱스 이전에 중복이 있으면 카운트합니다.
}
if (samecntB == 0) {//중복이 없다면
sum_ab[k] = B[i];// sum_ab배열에 A값을 추가합니다.
k++;// 기존의 k인덱스에 값을 넣었으므로 1 추가합니다.
}
}
// 삽입정렬알고리즘을 통해 오름차순 정렬하는 과정입니다
for (int y = 0; y < k - 1; y++) {
j = y;
while (j >= 0 && sum_ab[j] > sum_ab[j + 1]) {// j가 j+1보다 크다면 반복합니다
int temp = sum_ab[j];
sum_ab[j] = sum_ab[j + 1];
sum_ab[j + 1] = temp;// j와 j+1을 바꾸어줍니다.
j--; // j 인덱스를 줄입니다.
}
}
for (int y = 0; y < k; y++) {
printf("%d ", sum_ab[y]);
}// 완성된 배열 출력파트입니다.
}
|
cs |
728x90
'지난 학기들의 기록 > C 기초' 카테고리의 다른 글
[C실습] 함수 예제 - 시저암호화 및 복호화(Caesar cipher,카이사르 암호)+수정(파이썬코드 추가) (1) | 2020.06.01 |
---|---|
[C실습] 함수예제 - 높은 자릿수, 낮은자릿수부터 변환하기 (0) | 2020.05.31 |
[C실습] 배열 예제- 홀수와 짝수로 구분해서 정렬하기 (0) | 2020.05.31 |
[C실습] 배열 유형 분석 2- N개의 정수배열에서 M개의 칸씩 위치옮기기 (0) | 2020.05.31 |
[C실습] 배열 유형 분석 1- N개의 정수배열에서 M개씩 그룹지어 비교하기(+추가) (2) | 2020.05.31 |
댓글