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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

14395๋ฒˆ: 4์—ฐ์‚ฐ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ s๋ฅผ t๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•œ๋‹ค. s์™€ t๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 0์„, ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ผ๋ฉด, ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.  ์—ฐ์‚ฐ์˜ ์•„

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 S๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ S๋ฅผ ์‚ฌ์น™์—ฐ์‚ฐ(`*`, `+`, `-`, `/`)์„ ํ†ตํ•ด T๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ ์—ฐ์‚ฐ์ž๋“ค์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” BFS๋ฅผ ํ†ตํ•ด ํ’€ ์ˆ˜ ์žˆ์œผ๋ฉฐ, `*`, `+`, `/`์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฐ€์ง€๋ฅผ ๋ปฃ์œผ๋ฉด ๋œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด `-`์˜ ๊ฒฝ์šฐ ๊ฐ’์ด ๋น ์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 ๋˜ํ•œ, ์—ฐ์‚ฐ์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ์ˆœ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ€์ง€๋ฅผ ๋ป—์–ด ๋‚˜๊ฐˆ ๋•Œ `*`, `+`, `/` ์ˆœ์œผ๋กœ ํ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


def bfs(start):
    q = deque([start])

    while q:
        num, result = q.popleft()

        if num == t:
            return result

        for op in ('*', '+', '/'):
            if op == '*':
                new_s = num * num
            elif op == '+':
                new_s = num + num
            else:
                new_s = 1

            if 0 <= new_s <= t and new_s not in visited:
                visited.add(new_s)
                q.append([new_s, result + op])
    return -1


if __name__ == '__main__':
    s, t = map(int, stdin.readline().split())
    visited = set()

    if s == t:
        print(0)
    else:
        visited.add(s)
        print(bfs([s, '']))
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€