ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
์จ๋ฐ๊ผญ์ง ์๋ฆฌ์ฆ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ธฐ๋ณธ์ ์ธ ํ์ด ๋ฐฉ์์ 1697 ์จ๋ฐ๊ผญ์ง๊ณผ ๊ฐ๋ค. ํ์ง๋ง ์๊ฐ์ด๋ ํ ๊ฒฝ์ฐ, 0์ด์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ์๊ฐ์ด๋ ํ๋ ๊ฒฝ์ฐ์ ์ฐ์ ์์๋ฅผ ๋์ด ์ฒ๋ฆฌํ์ฌ์ผ ํ๋ค. ์ฆ, ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ ๊ทธ๋ํ๊ฐ ๋๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋ง์ฝ ํ์ฌ ์์น - 1, ํ์ฌ ์์น + 1, ํ์ฌ ์์น * 2์ ์ฐ์ ์์๊ฐ ๊ฐ๊ฐ ๋ค๋ฅด๋ค๋ฉด ๋ค์ต์คํธ๋ผ๋ก ํ์ด์ผ ํ๋ค. ํ์ง๋ง ๋ฌธ์ ์์๋ ํ์ฌ ์์น * 2(์๊ฐ ์ด๋)์ธ ๊ฒฝ์ฐ๋ง ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ์ BFS๋ก ํ ์ ์๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def bfs(start):
q = deque([start])
while q:
cur_loc = q.popleft()
if cur_loc == k:
return visited[cur_loc]
for next_loc in (cur_loc - 1, cur_loc + 1, cur_loc * 2):
if 0 <= next_loc < MAX_LOC and not visited[next_loc]:
visited[next_loc] = visited[cur_loc]
if next_loc == cur_loc * 2 and cur_loc > 0:
q.appendleft(next_loc)
else:
visited[next_loc] = visited[cur_loc] + 1
q.append(next_loc)
if __name__ == '__main__':
MAX_LOC = 100001
n, k = map(int, stdin.readline().split())
visited = [0] * MAX_LOC
print(bfs(n))
์๊ฐ์ด๋ (ํ์ฌ์์น * 2)์ ์ฐ์ ์์๋ฅผ ๋๊ธฐ ์ํด, ๊ณฑํ๊ธฐ ์ธ ๊ฒฝ์ฐ ํ์ ์ข์ธก์ ์ฝ์ ํ์ฌ ๋จผ์ ์ฒ๋ฆฌ ๋ ์ ์๋๋ก ํ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14226 ์ด๋ชจํฐ์ฝ (0) | 2020.07.25 |
---|---|
๋ฐฑ์ค: 13913 ์จ๋ฐ๊ผญ์ง 4 (0) | 2020.07.24 |
๋ฐฑ์ค: 12851 ์จ๋ฐ๊ผญ์ง 2 (0) | 2020.07.24 |
๋ฐฑ์ค: 1697 ์จ๋ฐ๊ผญ์ง (0) | 2020.07.23 |
๋ฐฑ์ค: 16929 Two Dots (0) | 2020.07.23 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ