Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 일상생활 영어표현
- 백준 1269번
- 백준 9506번
- C++
- C
- javascript
- 논리 연산
- Java
- 잡다한 일
- 피라미드 출력
- 5073번
- 배열
- 백준 27433번
- 백준 2525번
- 차이
- Unity
- 백준 1157번
- 백준 2501번
- html
- 알고리즘
- 백준 5597번
- 직각 삼각형
- 백준 25305번
- 백준 #11382번 #
- 백준 2587번
- 백준 5086번
- 대칭 차집합
- 해석
- 상세 풀이
- 연속된 숫자의 합
Archives
- Today
- Total
YunDev
백준 1269번[C] - 상세 풀이 본문
https://www.acmicpc.net/problem/1269
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int A, B, cnt = 0, sum = 0;
scanf("%d %d", &A, &B);
int *setA = (int*)malloc(sizeof(int) * A);
int *setB = (int*)malloc(sizeof(int) * B);
for(int i = 0; i < A; i++) {
scanf("%d", &setA[i]);
}
for(int i = 0; i < B; i++) {
scanf("%d", &setB[i]);
}
// 정렬
qsort(setA, A, sizeof(int), compare);
qsort(setB, B, sizeof(int), compare);
// 차집합 계산
int i = 0, j = 0;
while (i < A && j < B) {
if (setA[i] < setB[j]) {
sum++;
i++;
} else if (setA[i] > setB[j]) {
sum++;
j++;
} else {
i++;
j++;
}
}
// 나머지 원소 처리
sum += A - i + B - j;
printf("%d", sum);
free(setA);
free(setB);
return 0;
}
두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 합니다.
문제를 풀기 위해선 각각의 집합의 차집합을 구해야합니다. 코드 순서대로 풀이를 해보자면 집합 A, B의 원소의 개수를 입력받고 배열 "setA"와 배열 "setB"에 동적으로 메모리를 할당합니다. 그 다음, qsort 함수와 compare 함수를 이용하여 집합 A와 B를 오름차순으로 정렬합니다.
while 루프를 풀이해보자면 i와 j는 각각 setA와 setB의 인덱스를 나타냅니다. 현재 각각의 집합의 원소는 오름차순으로 정렬되어 있기 때문에 만약 setA[i]가 setB[j]보다 작으면, 이는 집합 A에만 있는 원소이므로 sum을 증가시키고 i를 증가시킵니다. 반대로, 만약 setA[i]가 setB[j]보다 크면, 이는 집합 B에만 있는 원소이므로 마찬가지로 sum을 증가시키고 j를 증가시킵니다. 두 원소가 같으면, 이는 두 집합에 모두 존재하는 원소이므로 sum을 증가시키고 i와 j를 각각 증가시킵니다.
이 과정을 통해 두 집합의 차집합을 계산하고, 각 원소를 한 번씩만 세며 sum에 그 개수를 저장하게 됩니다. 이후에 남은 집합의 원소들은 그 집합에만 있는 원소가 되므로 sum에 추가로 더해주어야 제대로 값을 구할 수 있게됩니다.
'Programming > Baekjoon Program' 카테고리의 다른 글
백준 1934번[C] - 상세 풀이 (0) | 2024.01.24 |
---|---|
백준 5073번[C] - 상세 풀이 (0) | 2024.01.22 |
백준 9506번[C] - 상세 풀이 (2) | 2024.01.21 |
백준 5086번[C] - 상세 풀이 (0) | 2024.01.20 |
백준 1978번[C] - 상세 풀이 (1) | 2024.01.19 |