ํฐ์คํ ๋ฆฌ ๋ทฐ
์จ๋ฐ๊ผญ์ง ์๋ฆฌ์ฆ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ 1697 ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์์ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ์๋น์ด์ ์์น๊ฐ 5, ๋์์ ์์น๊ฐ 17์ผ ๋ BFS๋ฅผ ํตํด ํ์ํด๋ณด๋ฉด ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ธ 4์ด์ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, ์ด์ ๋ฌธ์ ๋ ๋จ์ํ ๋ช ์ด๋ง์ ์ฐพ์ ์ ์๋๊ฐ?๋ฅผ ๋ฌป๋ ๋ฌธ์ ์์ผ๋ฉด ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง์ธ์ง๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def bfs(start):
q = deque([start])
while q:
cur_loc = q.popleft()
for next_loc in (cur_loc - 1, cur_loc + 1, cur_loc * 2):
if 0 <= next_loc < MAX_LOC:
if not check[next_loc][VISIT]:
check[next_loc][VISIT] = check[cur_loc][VISIT] + 1
check[next_loc][WAY] = check[cur_loc][WAY]
q.append(next_loc)
elif check[next_loc][VISIT] == check[cur_loc][VISIT] + 1:
check[next_loc][WAY] += check[cur_loc][WAY]
return check[k]
if __name__ == '__main__':
MAX_LOC = 100001
VISIT, WAY = 0, 1
n, k = map(int, stdin.readline().split())
check = [[0, 0] for _ in range(MAX_LOC)]
check[n][WAY] = 1
time, way = bfs(n)
print(time, way, sep='\n')
1697 ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด, ํด๋น ์์น๊น์ง ๋ฐฉ๋ฌธํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ, ๋ง์ฝ ๋ฐฉ๋ฌธํ ์์น๋ผ๋ฉด ํด๋น ์์น๋ฅผ ๋ฐฉ๋ฌธํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ ํ์ฌ ์์น๋ฅผ ๋ฐฉ๋ฌธํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ, ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 13913 ์จ๋ฐ๊ผญ์ง 4 (0) | 2020.07.24 |
---|---|
๋ฐฑ์ค: 13549 ์จ๋ฐ๊ผญ์ง 3 (0) | 2020.07.24 |
๋ฐฑ์ค: 1697 ์จ๋ฐ๊ผญ์ง (0) | 2020.07.23 |
๋ฐฑ์ค: 16929 Two Dots (0) | 2020.07.23 |
๋ฐฑ์ค: 1707 ์ด๋ถ ๊ทธ๋ํ (0) | 2020.07.22 |