알고리즘/문제
[비트마스킹] 백준 1062 가르침
_Min
2021. 5. 28. 10:37
문제링크 https://www.acmicpc.net/problem/1062
1. set()은 문자열로 넣어도 원소 하나하나로 접근한다는 점
2. combination에 현재 list 길이보다 큰 값이 들어오면 combination 함수가 돌아가지 않는다는 점
3. set() 연산 : |= 합집합, - 차집합
을 배웠다.
[답코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import sys
from itertools import combinations
input = sys.stdin.readline
n, k = map(int, input().split())
k -= 5
if k < 0:
print(0)
else:
word, bits, basecom = [], [], set()
bit = {chr(ord('a') + i): 1 << i for i in range(26)}
baseword = set('antic')
for _ in range(n):
word = set(input().strip()) - baseword # 빼기
basecom |= word # 더하기
tmp = 0
for w in word:
tmp += bit[w]
bits.append(tmp)
# bits, com
ret=0
for co in combinations(basecom, min(k, len(basecom))):
tmp = 0
for c in co:
tmp += bit[c]
cnt=0
for b in bits:
if tmp & b == b:
cnt+=1
ret=max(ret, cnt)
print(ret)
|
cs |
[반례]
2 7
antatica
antaktica
답 : 2
728x90