반응형
SMALL
문제 설명
주어진 숫자들로 두 개의 SLL을 구성하고, 두 SLL 간에 같은 숫자가 몇 개 있는지를 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에는 첫 번째 SLL에 추가할 숫자들의 개수 n이 주어진다. n > 0
두 번째 줄에는 n개의 숫자들이 공백으로 분리하여 주어진다. 숫자들은 모두 서로 다르다.
세 번째 줄에는 두 번째 SLL에 추가할 숫자들의 개수 m이 주어진다. m > 0
네 번째 줄에는 m개의 숫자들이 공백으로 분리하여 주어진다. 숫자들은 모두 서로 다르다.
하지만 두 번째 줄의 숫자들과는 같은 것들이 있을 수 있다.
출력 첫 번째 SLL과 두 번째 SLL 간에 서로 같은 숫자가 몇 개나 나오는지를 출력한다.
입력 예시
4
1 2 3 4
5
1 2 3 4 5
출력 예시
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }; struct node *head1 = 0; struct node *head2 = 0; void addToSLL(int _data, struct node** h) { struct node *new_one = (struct node *)malloc(sizeof(struct node)); new_one->data = _data; new_one->next = 0; if (*h == 0) { *h=new_one; return; } struct node *temp = *h; while (temp->next != 0) { temp = temp->next; } temp->next = new_one; return; } void countSameData() { struct node *temp1 = head1; struct node *temp2; int cnt = 0; while (temp1 != 0) { temp2 = head2; while (temp2 != 0) { if (temp1->data == temp2->data) { cnt++; } temp2 = temp2->next; } temp1 = temp1->next; } printf("%d", cnt); } void showSLL(struct node *h) { struct node *temp = h; while (temp != 0) { printf("%d ", temp->data); temp = temp->next; } } int main(void) { int n; int data; // for the first SLL scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &data); addToSLL(data, &head1); } // for the second SLL scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &data); addToSLL(data, &head2); } //showSLL(head1); //showSLL(head2); countSameData(); return 0; } |
반응형
LIST
'데이터구조 > 소스코드' 카테고리의 다른 글
OJ 1131번 해답 (0) | 2016.04.11 |
---|---|
OJ 1132번 해답 (0) | 2016.04.11 |
Queue 구현코드 (큐) (0) | 2016.04.04 |
Stack 구현 소스 (0) | 2016.04.04 |
Doubly Linked List (DLL) 소스코드 (0) | 2016.03.28 |