-
백준 1822번 : 차집합 (C 언어)c c++ 언어 공부 2023. 6. 30. 15:12
https://www.acmicpc.net/problem/1822
1822번: 차집합
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소
www.acmicpc.net
Code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include <stdio.h>#include <stdlib.h>int compare(const void* a, const void* b){if (*(int*)a > *(int*)b) return 1;else if (*(int*)a < *(int*)b) return -1;else return 0;}long long binarySearch(int arr[], long long target, long long left, long long right){while (left <= right) {long long mid = (left + right) / 2;if (arr[mid] == target)return mid;else if (arr[mid] < target)left = mid + 1;elseright = mid - 1;}return -1;}int main(){int n, m;scanf("%d %d", &n, &m);int arrn[500001] = { 0, };int arrm[500001] = { 0, };int check[500001] = { 0, };int flag = 0;int count = 0;for (int i = 0; i < n; i++){scanf("%d", &arrn[i]);}for (int i = 0; i < m; i++){scanf("%d", &arrm[i]);}for (int i = 0; i < n; i++){long long index = binarySearch(arrm, arrn[i], 0, m);if (index == -1){check[count++] = arrn[i];}}if (count == 0){printf("0");}else{qsort(check, count, sizeof(int), compare);printf("%d\n", count);for (int i = 0; i < count; i++){printf("%d ", check[i]);}}return 0;}cs 문제 설명
문제: 집합 A에는 속하면서 집합 B에는 속하지 않는 원소 구하기
주어진 문제는 두 개의 집합 A와 B가 주어졌을 때, 집합 A에 속하면서 집합 B에는 속하지 않는 원소를 구하는 문제입니다. 집합 A와 B는 자연수로 이루어져 있으며, 원소의 개수에는 제한이 있습니다. 이를 해결하기 위해 C 언어를 사용하여 프로그램을 작성해보겠습니다.
코드 설명
- 필요한 라이브러리를 포함시킵니다.
- compare 함수를 정의합니다. 이 함수는 qsort 함수에서 사용될 비교 함수입니다.
- binarySearch 함수를 정의합니다. 이 함수는 이진 검색을 수행하여 배열에서 원하는 값을 찾습니다.
- main 함수에서 변수 및 배열을 선언합니다. 그리고 집합 A와 B를 입력받습니다.
- 집합 B를 정렬합니다.
- 이진 검색을 통해 집합 A에 속하면서 집합 B에 속하지 않는 원소를 찾아 check 배열에 저장합니다.
- count 변수를 확인하여 결과를 출력합니다. 원소가 없는 경우 0을 출력하고, 원소가 있는 경우 정렬하여 출력합니다.
- 동적 할당한 배열을 해제합니다.
이렇게 작성된 코드를 실행하면 주어진 문제에 맞게 집합 A에 속하면서 집합 B에 속하지 않는 원소를 구할 수 있습니다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 2910번 : 빈도 정렬 (C++) (0) 2023.07.01 백준 2953번 : 나는 요리사다 (C 언어) (0) 2023.07.01 백준 2592번 : 대표값 (C 언어) (0) 2023.06.30 백준 2669번 : 직사각형 네개의 합집합의 면적 구하기 (C 언어) (0) 2023.06.28 백준 4344번 : 평균은 넘겠지 (C 언어) (0) 2023.06.27