728x90
https://www.acmicpc.net/problem/2607
2607번: 비슷한 단어
첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이
www.acmicpc.net
Counter 와 defaultdict 를 사용해 간단하게 풀 수 있는 문제였습니다.
from collections import defaultdict, Counter
def solution(data_list):
# 딕셔너리 리스트
dict_list = [defaultdict(int, Counter(data)) for data in data_list]
# 기준 딕셔너리
main_dict = dict_list[0]
# 비슷한 단어 카운트
sim_count = 0
# 딕셔서너리 리스트 순회
for sub_dict in dict_list[1:]:
# 글자 수가 2 이상 차이나면 패스
if abs(sum([value for value in main_dict.values()]) - sum([value for value in sub_dict.values()])) >= 2:
continue
# 차이 리스트
diff_list = [0 for _ in range(26)]
# 각 알파벳에 대해 차이 구하기
for asc in range(ord("A"), ord("Z")+1):
# 차이 리스트 채우기
diff_list[asc-ord("A")] = abs(main_dict[chr(asc)]-sub_dict[chr(asc)])
# 문자 수가 모든 차이의 합이 2 이하이고 모든 차이가 1 이하면 비슷한 단어
if sum(diff_list) <= 2 and all([num<=1 for num in diff_list]):
sim_count += 1
print(sim_count)
data_list = [input() for _ in range(int(input()))]
solution(data_list)
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 2143 <두 배열의 합> Python (0) | 2024.09.08 |
---|---|
백준 3673 <나눌 수 있는 부분 수열> Python (3) | 2024.09.07 |
백준 17608 <막대기> Python (1) | 2024.01.24 |
백준 1967 <트리의 지름> Python (2) | 2024.01.23 |
백준 10282 <해킹> Python (2) | 2024.01.10 |