๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1697)
<์จ๋ฐ๊ผญ์ง>
๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
if __name__=='__main__':
x,y=map(int,sys.stdin.readline().split())
answer=[0]*100001 # ์๊ฐ
visited=[0]*100001 # ๋ฐฉ๋ฌธ ์ฌ๋ถ
visited[x]=1
queue=deque([x])
dx=[-1,1,2]
flag=0
while queue:
temp=queue.popleft()
for i in range(2): # -1, +1
x=temp+dx[i]
if x>=0 and x<=100000 and visited[x]==0: # ๋ฒ์ ์, ๋ฐฉ๋ฌธ x
answer[x]=answer[temp]+1
visited[x]=1 # ๋ฐฉ๋ฌธ
queue.append(x)
if x==y: # ๋์์ ์ฐพ์ผ๋ฉด
flag=1
break
x=temp*2
if x >= 0 and x <= 100000 and visited[x]==0: # ๋ฒ์ ์, ๋ฐฉ๋ฌธ x
answer[x] = answer[temp] + 1
visited[x] = 1 # ๋ฐฉ๋ฌธ
queue.append(x)
if x==y or flag==1: # ๋์์ ์ฐพ์ผ๋ฉด
break
print(answer[y])
โ ์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๊ฐ?
์ ๋ง ๋นํฉ์ค๋ฝ๊ฒ๋ 0 <= N <= 100,000 ์กฐ๊ฑด๊ณผ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌด์จ ์๊ฐ์ผ๋ก ๊ทธ๋ฅ ํ์๋ง ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
- ์๋น, ๋์ ์์น ์ ๋ ฅ
- answer = ์๊ฐ
- visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ด๋ํ๋ ค๋ ์์น๊ฐ ๋ฒ์ ์์ด๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ์ด ์ ์ฅ ๋ฐ ๋ฐฉ๋ฌธ check, queue์ ์ถ๊ฐ
: ์ด๋ํ ์์น๊ฐ ๋์์ด ์๋ ๊ณณ์ด๋ฉด ์ข ๋ฃ
: x-1, x+1, x*2 ์ธ ๊ฒฝ์ฐ
โ java๋ก๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค์ง๋ง ๋๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ ํ๋ ธ์ต๋๋ค๊ฐ ๋ฐ์ํ๋ค.
์์ง.... ์ด์ ๋ฅผ ์ฐพ์ง ๋ชปํด์,....
์๊ฐ๐ค
java๋ก๋ ์ ํ๋ ธ์๊น,,?
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 11403_๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2022.04.07 |
---|---|
[Baekjoon] 2583_์์ญ ๊ตฌํ๊ธฐ (0) | 2022.04.06 |
[Baekjoon] 7562_๋์ดํธ์ ์ด๋ (0) | 2022.04.04 |
[Baekjoon] 2468_์์ ์์ญ (0) | 2022.04.01 |
[Baekjoon] 2178_๋ฏธ๋ก ํ์ (0) | 2022.03.31 |