Algorithm/코딩테스트 (Python)
[백준][22233번] 가희와 키워드
싱브이
2024. 1. 2. 21:40
728x90
반응형
문제
가희는 블로그를 운영하고 있습니다. 가희는 블로그에 글을 쓰기 위해, 메모장에 키워드를 적곤 합니다.
지금까지 메모장에 써진 키워드는 모두 서로 다르며, 총 N개가 존재합니다.
가희는 새로운 글을 작성할 때, 최대 10개의 키워드에 대해서 글을 작성합니다.
이 키워드들 중에 메모장에 있었던 키워드는 가희가 글을 쓴 이후, 메모장에서 지워지게 됩니다.
가희는 블로그에 글을 쓰고 나서, 메모장에 있는 키워드 개수가 몇 개인지 알고 싶습니다. 가희를 도와주세요.
내 생각
역대급으로 시간초과와 싸운 문제 ;;; 결국 이겨냈지만 찝찝했다. 왜냐면 답은 input방식이었기 때문,,
혹시 몰라서 틀렸다고 나온 코드도 input방식을 readline으로 바꾸니 정답이 되어버렸지 모야
프로그래머스에선 input()으로도 잘풀렸는데 백준은 역시 readline()인가보다 !
아무튼 문제를 요약하면 가희가 메모장에 적은 키워드와 블로그 글에 등장한 키워드를 제거하고 남아 있는 키워드의 개수를 출력해야한다.
딕셔너리를 사용하였다. (memo = {}) 딕셔너리의 역할은 메모장에 적은 키워드, 그리고 키워드의 등장 여부를 1과 0으로 저장
그리고 answer을 이용하여 메모장에 남아 있는 키워드를 계산하였다.
주석에 자세하게 설명되어 있음!
내 코드
1. 정답 (1)
import sys
# 메모장에 적은 키워드의 수(N)와 가희가 블로그에 쓴 글의 수(M)를 입력
N, M = map(int, input().split())
# 메모장에 있는 키워드를 저장하는 딕셔너리
memo = {}
# 남아 있는 키워드의 개수 (처음에는 모두 남아있으므로 N)
answer = N
# 메모장에 적은 키워드를 입력받아 memo에 1로 표시
for _ in range(N):
memo[sys.stdin.readline().rstrip()] = 1
# 블로그에 쓴 글의 수에 대해
for _ in range(M):
# 글에 등장한 키워드들을 콤마로 구분
post = sys.stdin.readline().rstrip().split(',')
for keyword in post:
# 현재 키워드가 메모장에 있고 and 이미 사용되지 않은 키워드라면
if keyword in memo and memo[keyword] == 1:
# 현재 키워드를 사용했음
memo[keyword] = 0
# 남아 있는 키워드의 개수 - 1
answer -= 1
print(answer)
2. 정답 (2)
import sys
# 가희가 메모장에 적은 키워드의 수(N)와 가희가 블로그에 쓴 글의 수(M)
N, M = map(int, input().split())
# 메모장에 적은 키워드들을 set으로 저장
notes = set(sys.stdin.readline().strip() for _ in range(N))
# 남아 있는 키워드를 위한 set : 초기에는 메모장에 있는 모든 키워드가 남아 있는 상태
keywords = set(notes)
for i in range(N+2, N+M+2):
# 블로그 글에 등장한 키워드들을 콤마(,)로 구분하여 set으로 저장
post = set(sys.stdin.readline().strip().split(","))
# 현재 남아 있는 키워드에서 글에 있는 키워드를 제거
keywords -= post
print(len(keywords))
3. 시간 초과(1)
N, M = map(int, input().split())
notes = set(input().strip() for _ in range(N))
keywords = set(notes)
for i in range(N+2, N+M+2):
post = set(input().strip().split(","))
keywords -= post
print(len(keywords))
4. 시간 초과(2)
N, M = map(int, input().split())
notes = set(input().strip() for _ in range(N))
keywords = dict.fromkeys(notes, 1)
for i in range(N+2, N+M+2):
post = set(input().strip().split(","))
for keyword in post:
if keyword in keywords:
del keywords[keyword]
print(len(keywords))
5. 시간 초과(3)
N, M = map(int, input().split())
memo = {}
answer = N
for _ in range(N):
memo[input().rstrip()] = 1
for _ in range(M):
post = input().rstrip().split(',')
for keyword in post:
if keyword in memo and memo[keyword] == 1:
memo[keyword] = 0
answer -= 1
print(answer)
728x90
반응형