딕셔너리를 이용해서 풀었다. 파이썬에서 딕셔너리=unordered_map 느낌인거같다. 자동정렬은 안되는 모양
처음에는
input=sys.stdin.readline
를 안썼다. 그랬더니 계속 틀려서 왜이러지 싶었는데 readline을 추가했더니 여전히 틀렸다(?)
<틀린코드>
import sys
input=sys.stdin.readline
n, m = map(int, input().split())
arr = {}
for i in range(n):
s = input()
arr[s] = 1
for i in range(m):
s = input()
if s not in arr:
arr[s] = 1
else:
arr[s] += 1
ans = 0
for i in arr:
if arr[i] > 1:
ans += arr[i]-1
print(ans)
틀린만한 구석이 없는데 왜 틀리는걸까 고민하다보니, 문제에서 놓친 부분을 찾을 수 있었다. n번째 라인까지 중복이 허용되지 않지만 m번째 라인까지는 중복이 허용된다. 그래서 아마 n부터 m번째 라인 사이에 같은 단어가 여러번 들어간거 같다.
나는 모든 단어는 중복되지 않는다고 생각해서 틀렸다.
n=1, m=3 일 때
sooyang (문자열집합 원소)
bini
bini
bini
입력이 이런 식으로 들어오면 arr[bini]==3이 된다. 문자열 집합에 포함되지 않은 값이 2이상이 돼서 정답에 포함되는 것이다.
<맞은코드>
import sys
input=sys.stdin.readline
n, m = map(int, input().split())
arr = {}
for i in range(n):
s = input()
arr[s] = 1
for i in range(m):
s = input()
if s not in arr:
continue
else:
arr[s] += 1
ans = 0
for i in arr:
if arr[i] > 1:
ans += arr[i]-1
print(ans)
딱 한 줄만 continue로 수정해주니 맞았다. 히히