본문 바로가기
지난 학기들의 기록/C 기초

[C실습] 배열예제 - 2차원 배열에서 다른 배열찾기

by 아메리카노와떡볶이 2020. 6. 8.
728x90

실습 문제중에 나온 문제입니다. 다른 문제에 비해 풀이하는데 시간이 걸렸으므로 기록해두기 위해 포스트를 씁니다.

핵심사항은 비교하는 배열과 비교당하는 배열을 구분지어서 각각의 인덱스를 독립적으로 생각해야한다는 점이었습니다.

자세한 내용은 코드에 주석을 달아두었습니다.

 

#완성된 코드

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
67
68
69
70
71
72
73
74
75
#pragma warning(disable:4996) 
#include <stdio.h> 
void where_is_y(int x[][3], int xcol, int xrow, int y[][2], int ycol, int yrow);
int main() {
    int x[3][3] = { 0 };
    int y[2][2] = { 0 };
    int i, j;
    int p = 0, q = 0;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            scanf("%d", &x[i][j]);
        }
    }
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {

            scanf("%d", &y[i][j]);
        }
    }
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {

            printf(" %d", x[i][j]);
        }
        printf("\n");
    }
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {

            printf(" %d", y[i][j]);
        }
        printf("\n");
    }
    where_is_y(x, 3, 3, y, 2, 2);
    return 0;
}

void where_is_y(int x[][3], int xcol, int xrow, int y[][2], int ycol, int yrow)
{
    int a = 0, b = 0, count = 0;// a,b는 y배열의 start idx  
    int discoverd_i = 0, discoverd_j = 0;
    int pass = 0;
    int p = 0, q = 0;
    //X배열 탐색 
    for (int i = 0; i < xrow; i++) {
        for (int j = 0; j < xcol; j++) {
            a = 0, b = 0, count = 0;
            if (x[i][j] == y[a][b]) { // y배열의 시작점과 같은 원소를 찾았다면? a=0,1 b=0,1 4가지경우일때 같은지 확인 
            // y가 0행일때 먼저 비교>> 1행일때 비교 
            /* y배열이 1 1 ==> 0행
                       1 1 ==> 1행 */
                discoverd_i = i;
                discoverd_j = j;
                p = i, q = j;
                for (a = 0; a < 2; a++, p++) { //0행부터 1행까지 비교 
                    b = 0, q = discoverd_j;
                    if (x[p][q] == y[a][b]) {//0열이 같다면 x의 열 idx j와 y배열의 열 idx b를 1씩추가후에 
                        q++;
                        b++;
                        if (x[p][q] == y[a][b]) {//1열 비교, 1열까지 같다면 0행은 다 같은거임 
                            count++;// 한 행이 같으면 cnt 추가 
                        }
                    }
                }
                if (count == 2 && pass == 0) {
                    printf("%d %d", discoverd_i, discoverd_j);
                    //0행와 1행이 같다면 cnt가 2일것임 
                    pass++;
                }
            }
        }
    }
    if (pass == 0) printf("none");

}
cs

 

 

728x90

댓글