๋ฌธ์ - ์จ๋ฐ๊ผญ์ง 2
์๋น์ด๊ฐ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋ํด์ ๋์ํํ ๊ฐ์ผ ํจ. ์ต์ ์๊ฐ์ผ๋ก ๋์ฐฉํ๋ ๊ฒฝ์ฐ์ ์๊น์ง ๊ตฌํด์ผ ํจ.
- ๊ฑท๊ธฐ: -1, +1
- ์๊ฐ์ด๋: *2
์๊ฐ์ด๋๋ง ๋ฌด์กฐ๊ฑด ๋น ๋ฅด๋ค๋ ๋ณด์ฅ ์์. ๋ค๋ก ๊ฐ๋ค๊ฐ ์๊ฐ์ด๋์ด ๋ ๋น ๋ฅผ ์๋ ์์. ๊ทธ๋์ ์ ๋ถ ๋์์ ๋ด์ผ ํจ.
์ ๋ต
์ต๋จ ์๊ฐ์ ๋์ ์ฐพ๋ ๊ฑด ์ฌ์. ๋ฌธ์ ๋ ๊ฒฝ๋ก ๊ฐ์ง์๊น์ง ์ธ์ผ ํ๋ค๋ ๊ฑฐ.
์๊ฐ์ด๋๋ง ํ๋ฉด ๋น ๋ฅด๋ค๊ณ ์๊ฐํ๋ฉด ๋ฐ๋ก ํ๋ฆฐ๋ค. ๋ค๋ก ๊ฐ๋ค๊ฐ ์๊ฐ์ด๋ํด์ ๋ ๋นจ๋ผ์ง ์๋ ์๊ธฐ ๋๋ฌธ.
์ด๋ฐ ๋ฌธ์ ๋ ๋ฌด์กฐ๊ฑด BFS๋ค. ํ ์นธ ์์ผ๋ก, ๋ค๋ก, 2๋ฐฐ ์ด๋ ์ ๋ถ ๊ฐ์ ๋น์ฉ์ด๋ผ ๋ ๋ฒจ ํ์์ผ๋ก ๋ค ๊ฐ์ด ๋ด์ผ ํ๋ค.
ํ ๋ฒ ๋ฐฉ๋ฌธํ๋ค๊ณ ๋๋๋ ๊ฒ ์๋. ๊ฐ์ ์์น์ ๊ฐ์ ์๊ฐ์ผ๋ก ์ฌ๋ฌ ๋ฒ ๊ฐ ์ ์์ผ๋ฉด ๊ทธ๊ฒ ์ ๋ถ ์ต๋จ ๊ฒฝ๋ก์.
๊ทธ๋์ visited๋ ์๊ฐ ๊ธฐ๋ก์ฉ, cnt๋ ๊ทธ ์๊ฐ์ ๋์ฐฉํ๋ ๊ฒฝ๋ก ์ ๋์ ์ฉ์ผ๋ก ์ฌ์ฉํจ.
์ฒ์ ๋ฐฉ๋ฌธํ๋ฉด cnt[next] = cnt[current]๋ก ์ด์ ๊น์ง ๊ฒฝ๋ก ์ ๊ทธ๋๋ก ๋๊ธด๋ค.
์ด๋ฏธ ๋ฐฉ๋ฌธํ ์๋ฆฌ๋ผ๋ ๊ฐ์ ์๊ฐ์ผ๋ก ๋ ๊ฐ๋ฉด cnt[next] += cnt[current]๋ก ๋ํ๋ค.
DFS ์ฐ๋ฉด ๋ชจ๋ ๊ฒฝ๋ก ๋๊น์ง ๋ด์ผ ํด์ ์๊ฐ ํฐ์ง.
ํต์ฌ์ visited๋ cnt ๋ ๋ค ์ ๋๋ก ์ฐ๋ ๊ฑฐ. ์ ๊ทธ๋ฌ๋ฉด ์๊ฐ์ ๋ง๊ณ ๊ฐ์ง์๋ ํ๋ฆผ.
#bfs
#์ต๋จ ์๊ฐ, ๊ฒฝ๋ก ์
from collections import deque
import sys
input=sys.stdin.readline
def bfs(start,end):
limit=10**5+1
#์ต๋จ๊ฒฝ๋ก ์๊ฐ
visited=[-1]*limit
visited[start]=0
#์ต๋จ๊ฒฝ๋ก ๊ฐ์ง์
cnt=[0]*limit
cnt[start]=1
q=deque([start])
while q:
current=q.popleft()
for next in [current-1,current+1,current*2]:
if 0<=next<limit:
if visited[next]==-1:
visited[next]=visited[current]+1
cnt[next]=cnt[current]
q.append(next)
#์ด๋ฏธ ๋ฐฉ๋ฌธํ๋๋ฐ, ๊ฐ์ ์๊ฐ์ผ๋ก ๋ ๋์ฐฉํ ์ ์๋ ๊ฒฝ์ฐ ์ต๋จ๊ฒฝ๋ก ์ถ๊ฐ
elif visited[next]==visited[current]+1:
cnt[next]+=cnt[current]
return visited[end],cnt[end]
def main():
n,k=map(int,input().split())
t,c=bfs(n,k)
print(t)
print(c)
if __name__=="__main__":
main()'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 13172 - pow ์ฐ์ฐ (๋ถํ ์ ๋ณต ๊ฑฐ๋ญ์ ๊ณฑ, ๋ชจ๋๋ฌ ์ญ์) (1) | 2025.07.14 |
|---|---|
| โ BOJ 10830 - ํ๋ ฌ ์ ๊ณฑ (0) | 2025.07.12 |
| โ BOJ 17144 - ๋นก๊ตฌํ (2) | 2025.07.11 |
| โ BOJ 11054 - DP, LIS (4) | 2025.07.09 |
| โ BOJ 5639 - ์ ์ ์ํ -> ํ์ ์ํ (1) | 2025.07.07 |