[python_파이썬_pass_집합 관련 함수 설명]백준_1764번_듣보잡_풀이
2024. 5. 11. 21:44ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/S9Tn1JM6-yc?feature=shared
2개의 입력값을 비교해서 2번 나오면 사전순으로 출력하는 문제이다.
처음에 기존 방식처럼 N과 M의 입력값들을 list로 구분하려고 방향을 잡았으나 굳이 그럴 필요 없이 입력을 받을때마다 중복을 검사하는 코드로 만들었다.
<첫번째 시도 : 맞았습니다. >
시간 제한이 있기 때문에 최대한 이중for문과 list를 탐색하는 방법을 사용하지 않았다.
dict를 한번 배워두니 훨씬 편하네.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
everyone = {}
check = []
for _ in range(N + M):
name = input().strip()
if name in everyone.keys():
everyone[name] += 1
else:
everyone[name] = 1
for key, value in everyone.items():
if value == 2:
check.append(key)
check.sort()
print(len(check))
for i in check:
print(i)
<다른사람풀이 참고>
1. intersection함수가 있었네. : 각각 set함수로 비교군을 만들어서 교집합을 찾음 => 이게 속도가 조금 빠르네.
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
n_set = set()
m_set = set()
for _ in range(n):
n_set.add(input().strip())
for _ in range(m):
m_set.add(input().strip())
answer = sorted(list(n_set.intersection(m_set)))
print(len(answer))
for i in answer:
print(i)
2. 집합 관련
- 집합 생성:
- set(iterable): 주어진 반복 가능한(iterable) 객체로부터 집합을 생성합니다.
- 집합 연산:
- union(): 두 집합의 합집합을 반환합니다. : a.union(b)
- intersection(): 두 집합의 교집합을 반환합니다.
- difference(): 첫 번째 집합에서 두 번째 집합의 요소를 제외한 차집합을 반환합니다.
- symmetric_difference(): 두 집합의 대칭 차집합을 반환합니다.
- 집합 관련 연산:
- issubset(): 하나의 집합이 다른 집합의 부분집합인지 여부를 확인합니다.
- issuperset(): 하나의 집합이 다른 집합의 상위집합인지 여부를 확인합니다.
- isdisjoint(): 두 집합이 공통 요소를 가지고 있는지 여부를 확인합니다.
- 집합 수정:
- add(): 집합에 요소를 추가합니다.
- remove(): 집합에서 요소를 제거합니다. 요소가 존재하지 않으면 KeyError를 발생시킵니다.
- discard(): 집합에서 요소를 제거합니다. 요소가 존재하지 않아도 오류를 발생시키지 않습니다.
- pop(): 집합에서 임의의 요소를 제거하고 반환합니다. 집합이 비어있으면 KeyError를 발생시킵니다.
- 사용 예시
- # 주어진 리스트로부터 집합을 생성합니다.
my_set = set([1, 2, 3, 4, 5])
print(my_set) # 출력: {1, 2, 3, 4, 5} - set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 두 집합의 합집합을 반환합니다.
union_set = set1.union(set2)
print(union_set) # 출력: {1, 2, 3, 4, 5, 6}
# 두 집합의 교집합을 반환합니다.
intersection_set = set1.intersection(set2)
print(intersection_set) # 출력: {3, 4}
# 첫 번째 집합에서 두 번째 집합의 요소를 제외한 차집합을 반환합니다.
difference_set = set1.difference(set2)
print(difference_set) # 출력: {1, 2}
# 두 집합의 대칭 차집합을 반환합니다.
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # 출력: {1, 2, 5, 6} - set3 = {1, 2}
set4 = {1, 2, 3, 4}
# set3이 set4의 부분집합인지 확인합니다.
is_subset = set3.issubset(set4)
print(is_subset) # 출력: True
# set4가 set3의 상위집합인지 확인합니다.
is_superset = set4.issuperset(set3)
print(is_superset) # 출력: True
# 두 집합이 공통 요소를 가지고 있는지 여부를 확인합니다.
is_disjoint = set1.isdisjoint(set2)
print(is_disjoint) # 출력: False - my_set = {1, 2, 3}
# 집합에 요소를 추가합니다.
my_set.add(4)
print(my_set) # 출력: {1, 2, 3, 4}
# 집합에서 요소를 제거합니다.
my_set.remove(3)
print(my_set) # 출력: {1, 2, 4}
# 집합에서 임의의 요소를 제거하고 반환합니다. : 집합은 순서가 없기 때문에 임의의 수?
popped_element = my_set.pop()
print(popped_element) # 출력: 1
print(my_set) # 출력: {2, 4} - 다음과 같이 매칭할 수 있습니다:
- union(): |
- intersection(): &
- difference(): -
- symmetric_difference(): ^
- issubset(): <= 또는 <
- issuperset(): >= 또는 >
- isdisjoint(): isdisjoint()
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬]백준_11478번_서로 다른 부분 문자열의 개수_풀이 (0) | 2024.05.11 |
---|---|
[python_파이썬_pass]백준_1269번_대칭 차집합_풀이 (0) | 2024.05.11 |
[python_파이썬_pass]백준_10816번_숫자 카드2_풀이 (0) | 2024.05.11 |
[python_파이썬]백준_1620번_나는야 포켓몬 마스터 이다솜_풀이 (0) | 2024.05.11 |
[python_파이썬_pass]백준_7785번_회사에 있는 사람_풀이 (0) | 2024.05.11 |