๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/12851)
<์จ๋ฐ๊ผญ์ง 2>
๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ 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
queue=deque([x])
cnt=0
if x==y: # ํ์ฌ ์์น์ ๋์ฐฉํ ์์น๊ฐ ๊ฐ๋ค๋ฉด
cnt=1
else:
while queue:
temp=queue.popleft()
dx = [temp-1, temp+1, temp*2] # 1์ด ํ
for x in dx:
if x>=0 and x<=100000 : # ์ ๋ฒ์
if answer[x]==0 or answer[x]>=answer[temp]+1:
if x == y and answer[x] == answer[temp] + 1: # ๋ฐฉ๋ฒ์ ์
cnt += 1
elif x==y and (answer[x]>answer[temp]+1 or answer[x]==0): # ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ
cnt=1
answer[x]=answer[temp]+1
queue.append(x)
print(answer[y]) # ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ
print(cnt) # ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์
์ ๋ฒ์ ํด๊ฒฐํ๋ 1697 ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์ ๋งค์ฐ ๋น์ทํ ๋ฌธ์ ์ด๋ค.
ํ์ง๋ง ์ด ๋ฌธ์ ์์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ํจ๊ป ๊ตฌํด์ผ ํ๋ฏ๋ก ์ฝ๋๋ฅผ ๊ณ ์ณ์ผ ํ๋ค.
- ํ์ฌ ์์น, ๋์ฐฉํด์ผ ํ ์์น ์ ๋ ฅ
- answer = ์๊ฐ
- cnt = ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์
- ํ์ฌ ์์น์ ๋์ฐฉํด์ผ ํ ์์น๊ฐ ๊ฐ๋ค๋ฉด -> ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ = 0, ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ =1
- ํ์ฌ ์์น์ ๋์ฐฉํด์ผ ํ ์์น๊ฐ ๊ฐ์ง ์๋ค๋ฉด -> queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ด๋ํ๋ ค๋ ์์น๊ฐ ๋ฒ์ ์ -> ์์ง ๊ทธ ์์น๋ฅผ ํ ๋ฒ๋ ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉฐ ( answer [x] =0 ) ๋น ๋ฅธ ์๊ฐ์ด๋ผ๋ฉด (answer [x]>=answer [temp]+1) -> ๋์ฐฉ ์์น์ด๋ฉฐ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด๋ฉด cnt +1 but ๋์ฐฉ ์์น์ด๋ฉฐ ๋น ๋ฅธ ์๊ฐ ๊ฐฑ์ ์ด๋ฉด cnt =1 / ์์ ๋ ์กฐ๊ฑด๊ณผ ์๊ด์์ด answer ๊ฐ update ๋ฐ queue์ ์ถ๊ฐ
- ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ ( answer [y] ), ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ ( cnt ) ์ถ๋ ฅ
โ ์ฒ์์ ์ ํ๋ ธ๋๊ฐ?
๋๊ฐ์ ๊ธธ๋ก ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ์๋ค. ์๋ฅผ ๋ค์ด 1 3์ด ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ฉด 2 2 ๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ๋ค. 1 + 1 +1 , (1 * 2) +1๊ณผ ๊ฐ์ด 2๊ฐ์ง์ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ฒซ ๋ฒ์งธ ์ ์ถํ ์ฝ๋๋ก๋ ํ๋ฒ ๋ฐฉ๋ฌธํ๋ ๊ณณ์ ๋ค์ ๊ฐ์ง ๋ชปํด 1์์ 2๋ก ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ํ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋์ค๋๋ก ๊ตฌํํ์๊ธฐ ๋๋ฌธ์ด๋ค.
โ ๋ ๋ฒ์งธ๋ ์ ํ๋ ธ๋๊ฐ?
์ ๋ ฅ๋ฐ์ ๋ x์ y ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ฃผ์ง ๋ชปํ์๋ค. ์ฒ์์ ํ๋ ธ์ ๋ x์ y๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ดค์ง๋ง ๋ด๊ฐ ๊ตฌํ ๊ฐ์ด ๋ง๋ ์ค ์์๋ค. ์๋ฌด๋ฆฌ ๋ค๋ฅธ ์์ ๋ฅผ ์ ๋ ฅํด๋ ๋ง๋ค๊ณ ์๊ฐํ์ฌ ์ฐพ์๋ณด๋ x์ y ๊ฐ์ด ๊ฐ์ ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก๋ 0์ด, ๋ฐฉ๋ฒ์ ์๋ก๋ 1์ด ๋์์ผ ํ๋ค๋ ๊ฒ์ด์๋ค. 0์ด๊ฐ ๊ฐ๋ฅํ์ง๋ ๋ชฐ๋๋ค.... ๊ทธ๋์ while๋ฌธ ๋ค์์ x์ y ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ฒ๋ฆฌํด์ฃผ์๋๋ ๋ ํ๋ ค ์ด ๋ฌธ์ ๊ฐ ์๋ ์ค ์์๋ค. ํ์ง๋ง ํ์ฐธ ์ฐพ์๋ณด๋ x์ y๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ ์กฐ๊ฑด๋ฌธ์ ์๋ชป๋ ์์น์ ๋ฃ์ด์ ํด๊ฒฐํ์ง ๋ชปํ ๊ฒ์ด์๋ค.
์๊ฐ๐ค
๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ํผ์์ ์ ํด๊ฒฐํ์ฌ ๋ฟ๋ฏํดํ๊ณ ์์๋๋ฐ...
x์ y๊ฐ ๊ฐ์ ๊ฒฝ์ฐ 0์ด.. 0 ์ด๋ผ๋..
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1743_์์๋ฌผ ํผํ๊ธฐ (0) | 2022.04.21 |
---|---|
[Baekjoon] 1926_๊ทธ๋ฆผ (0) | 2022.04.20 |
[Baekjoon] 16948_๋ฐ์ค ๋์ดํธ (0) | 2022.04.15 |
[Baekjoon] 2636_์น์ฆ (0) | 2022.04.13 |
[Baekjoon] 16928_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.04.12 |