ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
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
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 3184 ์ (0) | 2020.09.15 |
---|---|
๋ฐฑ์ค: 1600 ๋ง์ด ๋๊ณ ํ ์์ญ์ด (0) | 2020.09.14 |
๋ฐฑ์ค: 10026 ์ ๋ก์์ฝ (0) | 2020.09.13 |
๋ฐฑ์ค: 11728 ๋ฐฐ์ด ํฉ์น๊ธฐ (0) | 2020.09.12 |
๋ฐฑ์ค: 10816 ์ซ์ ์นด๋ 2 (0) | 2020.09.12 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ