Algorithm/Baekjoon

#백준 1764, 파이썬 / set 집합 자료형 교집합, 합집합, 차집합

say! 2022. 10. 20. 16:58
728x90
n, m = map(int, input().split())

# 딕셔너리에 듣도 못한 사람의 이름, 수 입력받기
names = {}
for i in range(n):
    name = input()
    names[name] = 1

ans = []
for j in range(m):
    name = input()
    if names.get(name) == None:  # 딕셔너리에 있는 이름일 경우 듣보잡
        continue
    else:
        ans.append(name)

# 결과 출력
print(len(ans))
for answer in ans:
    print(answer)

왜 틀렸다고 나오는지 모르겠다ㅠ

혹시나 이유를 아시는 분은 댓글 달아주시면 좋을 것 같습니다ㅠ


다른 분들의 풀이를 검색해봤더니 set 집합 자료형을 통해 교집합을 구하는 방식으로 구하셨더라.

# 백준 집합과 맵 : 1764번 - 듣보잡

n, m = map(int, input().split())  # 듣도 못한 사람의 수, 보지 못한 사람의 수 입력받기

name1 = set()
name2 = set()

for i in range(n):
  name = input()
  name1.add(name)

for i in range(m):
  name = input()
  name2.add(name)

ans = sorted(list(name1 & name2))
print(len(ans))
for i in ans:
  print(i)

 

set 집합 자료형은 중복을 허용하지 않고 순서가 없다.

s1 = set([1, 2, 3, 4])
s1.add(5)	# {1, 2, 3, 4, 5}로 값 1개 추가됨

s1.update([6, 7, 8]) # {1, 2, 3, 4, 5, 6, 7, 8}로 값 여러 개 추가가능

s1.remove(7)	# {1, 2, 3, 4, 5, 6, 8}로 값 제거가능

 

- 교집합

# 교집합 구하기
s1 = set([1, 2, 3, 4])
s2 = set([3, 4, 5, 6])

# 교집합 {3, 4} 출력됨
print(s1 & s2)	
print(s1.intersection(s2))

 

- 합집합

# 합집합 구하기
s1 = set([1, 2, 3, 4])
s2 = set([3, 4, 5, 6])

# 합집합 {1, 2, 3, 4, 5, 6} 출력됨
print(s1 | s2)	
print(s1.union(s2))

 

- 차집합

# 차집합 구하기
s1 = set([1, 2, 3, 4])
s2 = set([3, 4, 5, 6])

# 차집합 {1, 2} 출력됨
print(s1 - s2)	
print(s1.difference(s2))