본문 바로가기
Computer Science

A응실 금속막대 / 구현 아이디어

by OKOK 2018. 12. 19.

1. 아이디어

2. n 구조체

3. left_exist, right_exist 1차원 배열 선언

4. 처음 시작하는 것 찾고 연결하기 


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
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//#define MAX 55
#define MAX 10
typedef struct node {        //시작순으로 사용할 것임!!
    int left;
    int right;
}node;
node n[MAX];
int left_exist[MAX];   //left 존재하는지 확인
int right_exist[MAX];   //right 존재하는지 확인!
int num;
int main() {
    freopen("input.txt""r", stdin);
    int testcase;
    scanf("%d"&testcase);
    int i, j, k;
    int a, b;
    //testcase = 1;
    for (int abc = 0; abc < testcase; abc++) {
        //init
        for (i = 0; i < MAX; i++) {
            left_exist[i] = right_exist[i] = 0;
        }
        scanf("%d"&num);
        for (i = 0; i < num; i++) {
            scanf("%d"&a);
            scanf("%d"&b);
            //시작점에 해당하는 대로 넣기
            n[a].left = a;
            n[a].right = b;
            left_exist[a]++;
            right_exist[b]++;
        }//end for i
         //for (i = 0; i < 6; i++){
         //  printf("%d %d %d\n", i, left_exist[i], right_exist[i]);
         //}
 
        int idx = 0;
        //맨앞에 올만한거 찾기 
        for (i = 0; i < MAX; i++) {
            if (left_exist[i]>0 && right_exist[i] == 0) {
                idx = i;
                break;
            }
        }
        printf("#%d ", abc + 1);
        //찾아서 출력
        int cnt = 0;
        while (1) {
            if (num <= cnt) break;
            printf("%d %d ", n[idx].left, n[idx].right);
            idx = n[idx].right;
            cnt++;
        }
        puts("");
 
    }//end testcase
    return 0;
}
 
cs


댓글