๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[DP] 12906 ์ƒˆ๋กœ์šด ํ•˜๋…ธ์ด ํƒ‘ python

๐Ÿ“„ 12906 ์ƒˆ๋กœ์šด ํ•˜๋…ธ์ด ํƒ‘ ๐Ÿ“„

www.acmicpc.net/problem/12906

 

12906๋ฒˆ: ์ƒˆ๋กœ์šด ํ•˜๋…ธ์ด ํƒ‘

์ฒซ์งธ ์ค„์— ๋ง‰๋Œ€ A์— ๋†“์—ฌ์ ธ ์žˆ๋Š” ์›ํŒ์˜ ๊ฐœ์ˆ˜์™€ ๋ง‰๋Œ€ A์˜ ์ƒํƒœ, ๋‘˜์งธ ์ค„์— ๋ง‰๋Œ€ B์— ๋†“์—ฌ์ ธ ์žˆ๋Š” ์›ํŒ์˜ ๊ฐœ์ˆ˜์™€ ๋ง‰๋Œ€ B์˜ ์ƒํƒœ, ์…‹์งธ ์ค„์— ๋ง‰๋Œ€ C์— ๋†“์—ฌ์ ธ ์žˆ๋Š” ์›ํŒ์˜ ๊ฐœ์ˆ˜์™€ ๋ง‰๋Œ€ C์˜ ์ƒํƒœ๊ฐ€ ์ฃผ

www.acmicpc.net


๐Ÿค” ๋ฌธ์ œ ํ’€์ด  ๐Ÿค”

pypy3๋กœ ์ฑ„์ ์„ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒ!

 

์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ์–ด๋–ป๊ฒŒ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ• ๊ฒƒ์ธ์ง€๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ธฐ๋ณธ์ ์ธ BFS์ฒ˜๋Ÿผ ๋ฐฐ์—ด๋กœ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

๊ฐ๊ฐ์˜ ๊ธฐ๋‘ฅ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์›ํŒ์„ "/"์œผ๋กœ ๊ตฌ๋ถ„์‹œ์ผœ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ ๋‹ค.

์ด ํ›„ set()๋‚˜ dict()๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž์—ด์˜ ์ค‘๋ณต ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


โŒจ๏ธ ์ฝ”๋“œ โŒจ๏ธ

import collections

arr = [input()[2:] for _ in range(3)]
#visited = set()
visited = collections.defaultdict(int)
q = collections.deque()

q.append((arr[0], arr[1], arr[2], 0))

while q:
    a, b, c, count = q.popleft()
    cont_str = a + "/" + b + "/" + c

    if 'B' not in a and 'C' not in a:
        if 'A' not in b and 'C' not in b:
            if 'A' not in c and 'B' not in c:
                print(count)
                exit(0)

    #if not cont_str in visited:
        #visited.add(cont_str)
    if not visited[cont_str]:
        visited[cont_str] += 1

        if len(a) > 0:
            q.append((a[:-1], b + a[-1], c, count + 1))
            q.append((a[:-1], b, c + a[-1], count + 1))
        if len(b) > 0:
            q.append((a, b[:-1], c + b[-1], count + 1))
            q.append((a + b[-1], b[:-1], c, count + 1))
        if len(c) > 0:
            q.append((a, b + c[-1], c[:-1], count + 1))
            q.append((a + c[-1], b, c[:-1], count + 1))

print(-1)

Reference

  •