[백준 문제] 1062번 가르침 (파이썬)


[백준 문제] 1062번 가르침 (파이썬)

[백준 문제] 1062번 가르침를 풀어본다.

의식의 흐름

  1. set을 이용하면 손쉽게 풀어질줄 알았으나, 시간초과의 늪에서 헤어나오지 못함
  2. 좀더 생각해봐야겠음
from itertools import combinations
import sys

N, K = map(int, sys.stdin.readline().split())

basic_set = {'a', 'c', 'i', 'n', 't'}
all_set = set()
word_lst = []
ans = 0

for _ in range(N):
    word_set = set(sys.stdin.readline())  
    word_set = word_set - {'\n'}
    diff_set = word_set - basic_set  
    word_lst.append(list(diff_set)) 

    all_set = all_set.union(word_set)

diff_set = all_set - basic_set  
diff_lst = list(diff_set)  
diff_lst = sorted(diff_lst) 
per = combinations(diff_lst, K - 5)

for spellin in per:
    cnt = 0
    spell_lst = list(spellin) # 알려줄 알파벳 리스트
    for word_gp in word_lst:  # [[r], [c,a,r]] 리스트에서
        is_True = 1
        for word in word_gp : # [c,a,r] -> c, 실제 단어
            if word in spell_lst:
                is_True *= 1
            else:
                is_True *= 0
        if is_True == 1:
            cnt += 1
    ans = max(ans, cnt)

print(ans)





© 2018. by statssy

Powered by statssy