ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

1062๋ฒˆ: ๊ฐ€๋ฅด์นจ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , K๋Š” 26๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋‚จ๊ทน ์–ธ์–ด์˜ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด๋Š” ์˜์–ด ์†Œ๋ฌธ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ํ•™์ƒ๋“ค์€ 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
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€