[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. 집합 관련

  1. 집합 생성:
    • set(iterable): 주어진 반복 가능한(iterable) 객체로부터 집합을 생성합니다.
  2. 집합 연산:
    • union(): 두 집합의 합집합을 반환합니다. : a.union(b)
    • intersection(): 두 집합의 교집합을 반환합니다.
    • difference(): 첫 번째 집합에서 두 번째 집합의 요소를 제외한 차집합을 반환합니다.
    • symmetric_difference(): 두 집합의 대칭 차집합을 반환합니다.
  3. 집합 관련 연산:
    • issubset(): 하나의 집합이 다른 집합의 부분집합인지 여부를 확인합니다.
    • issuperset(): 하나의 집합이 다른 집합의 상위집합인지 여부를 확인합니다.
    • isdisjoint(): 두 집합이 공통 요소를 가지고 있는지 여부를 확인합니다.
  4. 집합 수정:
    • add(): 집합에 요소를 추가합니다.
    • remove(): 집합에서 요소를 제거합니다. 요소가 존재하지 않으면 KeyError를 발생시킵니다.
    • discard(): 집합에서 요소를 제거합니다. 요소가 존재하지 않아도 오류를 발생시키지 않습니다.
    • pop(): 집합에서 임의의 요소를 제거하고 반환합니다. 집합이 비어있으면 KeyError를 발생시킵니다.
  5. 사용 예시
  6. # 주어진 리스트로부터 집합을 생성합니다.
    my_set = set([1, 2, 3, 4, 5])
    print(my_set)  # 출력: {1, 2, 3, 4, 5}
  7. 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}
  8. 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
  9. 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}
  10. 다음과 같이 매칭할 수 있습니다:
    • union(): |
    • intersection(): &
    • difference(): -
    • symmetric_difference(): ^
    • issubset(): <= 또는 <
    • issuperset(): >= 또는 >
    • isdisjoint(): isdisjoint()
728x90
반응형