문제
자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.
예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.
https://www.acmicpc.net/problem/1269
1269번: 대칭 차집합
첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어
www.acmicpc.net
import sys
A,B=map(int,sys.stdin.readline().split())
A_list=list(map(int,sys.stdin.readline().split()))
B_list=list(map(int,sys.stdin.readline().split()))
count=0
A_dict={}
B_dict={}
for x in A_list:
A_dict[x]=0
for x in B_list:
B_dict[x]=0
for x in A_list:
if(x not in B_dict):
count+=1
for x in B_list:
if(x not in A_dict):
count+=1
print(count)
※ 집합과 맵

● 먼저 집합 A의 모든 원소를 A_list 배열에, 집합 B의 모든 원소를 B_list 배열에 넣는다.
● 그 후 A_dict라는 딕셔너리에 A_list에 있는 모든 요소들이 key로 들어갈 수 있도록, B_dict라는 딕셔너리에 B_list에 있는 모든 원소들이 key로 들어갈 수 있도록 한다. (value값은 무엇이든지 상관없다.)
● 그리고 A_list의 모든 요소를 돌며 각 요소가 B_dict의 key들 중에 포함되어 있지 않으면 count를 1 증가시켜준다.(B_dict의 key들은 B 집합의 원소들이므로 A_list의 요소가 B_dict의 key에 포함되어있지 않다는 말은 A 집합의 요소가 B 집합에는 포함되어있지 않다는 뜻이므로 A_list의 요소를 모두 돌면 결국 (A-B) 원소의 개수가 count에 더해지게 된다.)
● 마지막으로 B_list의 모든 요소를 돌며 각 요소가 A_dict의 key들 중에 포함되어 있지 않으면 count를 1 증가시켜준다.(A_dict의 key들은 A 집합의 원소들이므로 B_list의 요소가 A_dict의 key에 포함되어있지 않다는 말은 B집합의 요소가 A 집합에는 포함되어있지 않다는 뜻이므로 B_list의 요소를 모두 돌면 결국 (B-A) 원소의 개수가 count에 더해지게 된다.)
● 결국 count에는 (A-B) 와 (B-A)의 합집합, 즉 A와 B의 대칭 차집합 원소의 개수가 저장되게 된다~~


'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 2477번: 참외밭(실버 3, 파이썬 PYTHON) - 기하1 (0) | 2022.09.06 |
---|---|
백준(baekjoon) 11478번: 서로 다른 부분 문자열의 개수(실버 3, 파이썬 PYTHON) - 집합과 맵 (0) | 2022.09.06 |
백준(baekjoon) 10815번: 숫자 카드(실버 5, 파이썬 PYTHON) - 집합과 맵 (2) | 2022.09.05 |
백준(baekjoon) 18870번: 좌표 압축(실버 2, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |
백준(baekjoon) 2108번: 통계학(실버 3, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |
문제
자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.
예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.
https://www.acmicpc.net/problem/1269
1269번: 대칭 차집합
첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어
www.acmicpc.net
import sys
A,B=map(int,sys.stdin.readline().split())
A_list=list(map(int,sys.stdin.readline().split()))
B_list=list(map(int,sys.stdin.readline().split()))
count=0
A_dict={}
B_dict={}
for x in A_list:
A_dict[x]=0
for x in B_list:
B_dict[x]=0
for x in A_list:
if(x not in B_dict):
count+=1
for x in B_list:
if(x not in A_dict):
count+=1
print(count)
※ 집합과 맵

● 먼저 집합 A의 모든 원소를 A_list 배열에, 집합 B의 모든 원소를 B_list 배열에 넣는다.
● 그 후 A_dict라는 딕셔너리에 A_list에 있는 모든 요소들이 key로 들어갈 수 있도록, B_dict라는 딕셔너리에 B_list에 있는 모든 원소들이 key로 들어갈 수 있도록 한다. (value값은 무엇이든지 상관없다.)
● 그리고 A_list의 모든 요소를 돌며 각 요소가 B_dict의 key들 중에 포함되어 있지 않으면 count를 1 증가시켜준다.(B_dict의 key들은 B 집합의 원소들이므로 A_list의 요소가 B_dict의 key에 포함되어있지 않다는 말은 A 집합의 요소가 B 집합에는 포함되어있지 않다는 뜻이므로 A_list의 요소를 모두 돌면 결국 (A-B) 원소의 개수가 count에 더해지게 된다.)
● 마지막으로 B_list의 모든 요소를 돌며 각 요소가 A_dict의 key들 중에 포함되어 있지 않으면 count를 1 증가시켜준다.(A_dict의 key들은 A 집합의 원소들이므로 B_list의 요소가 A_dict의 key에 포함되어있지 않다는 말은 B집합의 요소가 A 집합에는 포함되어있지 않다는 뜻이므로 B_list의 요소를 모두 돌면 결국 (B-A) 원소의 개수가 count에 더해지게 된다.)
● 결국 count에는 (A-B) 와 (B-A)의 합집합, 즉 A와 B의 대칭 차집합 원소의 개수가 저장되게 된다~~


'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 2477번: 참외밭(실버 3, 파이썬 PYTHON) - 기하1 (0) | 2022.09.06 |
---|---|
백준(baekjoon) 11478번: 서로 다른 부분 문자열의 개수(실버 3, 파이썬 PYTHON) - 집합과 맵 (0) | 2022.09.06 |
백준(baekjoon) 10815번: 숫자 카드(실버 5, 파이썬 PYTHON) - 집합과 맵 (2) | 2022.09.05 |
백준(baekjoon) 18870번: 좌표 압축(실버 2, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |
백준(baekjoon) 2108번: 통계학(실버 3, 파이썬 PYTHON) - 정렬 (0) | 2022.09.05 |