ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
ํ์๋ค์ K๊ฐ์ ์ํ๋ฒณ์ ๋ฐฐ์ธ ์ ์๋ค. ์ด๋ N๊ฐ์ ๋จ์ด ์ค ๊ฐ์ฅ ๋ง์ ๋จ์ด๋ฅผ ์ฝ์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ฉฐ DFS๋ก ํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค.
-
์ธ์ด๋"anta"๋ก ์์๋๊ณ , "tica"๋ก ๋๋๋ฏ๋ก ๋ฐฐ์ธ ์ ์๋ ๋จ์ด ์ค, 'a', 'c', 'i', 'n', 't'๋ฅผ ๋ฐฐ์์ผ ํ๋ฏ๋ก 5๋ฅผ ์ ์ธํ๋ค.
- ๋ง์ฝ K๊ฐ 5๋ณด๋ค ์๋ค๋ฉด, ์ฝ์ ์ ์๋ ๋จ์ด๋ ์๋ค.
- K๊ฐ 26์ด๋ผ๋ฉด ๋ชจ๋ ์ํ๋ฒณ์ ๋ฐฐ์ธ ์ ์์ผ๋ฏ๋ก ์ฃผ์ด์ง ๋จ์ด N์ ๋ค ์ฝ์ ์ ์๋ค.
- DFS๋ ๋ฐฑํธ๋ํน์ ํตํด, a ~ z ์ค K - 5 ๋งํผ ๋ฐฐ์ด ํ ๋ช ๊ฐ์ ๋จ์ด๋ฅผ ์ฝ์ ์ ์๋์ง ํ์ธํ๋ค.
์ฝ๋
from sys import stdin, exit
def dfs(idx, cnt):
global answer
if cnt == k - 5:
read_cnt = 0
for word in words:
for w in word:
if not learn[ord(w) - ord('a')]:
break
else:
read_cnt += 1
answer = max(answer, read_cnt) if answer else read_cnt
return
for i in range(idx, 26):
if not learn[i]:
learn[i] = True
dfs(i, cnt + 1)
learn[i] = False
if __name__ == '__main__':
answer = None
n, k = map(int, stdin.readline().split())
if k < 5 or k == 26:
print(0 if k < 5 else n)
exit(0)
words = [set(stdin.readline().rstrip()) for _ in range(n)]
learn = [False] * 26
for c in ('a', 'c', 'i', 'n', 't'):
learn[ord(c) - ord('a')] = True
dfs(0, 0)
print(answer)
์ด๊ธฐ์ ๋จ์ด๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋, ์ค๋ณต๋๋ ์ํ๋ฒณ์ด ์๋ค๋ฉด ํ์์ ์ค๋ฒํค๋๋ง ์ฆ๊ฐ์ํค๋ฏ๋ก set()์ ์ด์ฉํ์ฌ ๋จ์ด ์ค ์ค๋ณต๋ ์ํ๋ฒณ์ด ์๋๋ก ํ์๋ค. ํ์ด์ฌ์ผ๋ก๋ ํด๋น ์ฝ๋๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฉฐ, PyPy3๋ก ์ ์ถํ ๊ฒฝ์ฐ ์๊ฐ ๋ด์ ์ ๋ต์ ๋ฐ์ํ ์ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1339 ๋จ์ด ์ํ (0) | 2020.08.20 |
---|---|
๋ฐฑ์ค: 1107 ๋ฆฌ๋ชจ์ปจ (0) | 2020.08.19 |
๋ฐฑ์ค: 7453 ํฉ์ด 0์ธ ๋ค ์ ์ (0) | 2020.08.17 |
๋ฐฑ์ค: 2143 ๋ ๋ฐฐ์ด์ ํฉ (0) | 2020.08.17 |
๋ฐฑ์ค: 1208 ๋ถ๋ถ์์ด์ ํฉ 2 (0) | 2020.08.16 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ