-
[๋ฐฑ์ค] 12761 ๋๋ค๋ฆฌ with PythonPS 2022. 3. 23. 16:33728x90๋ฐ์ํ
๐ BOJ 12761 ๋๋ค๋ฆฌ
๐ก ์กฐ๊ฑด
๋์ ๋ฒํธ๋ 0 ๋ถํฐ 100,000 ๊น์ง ์กด์ฌํ๊ณ ๋๊ท๋ N๋ฒ ๋ ์์, ์ฃผ๋ฏธ๋ M๋ฒ ๋ ์์ ์์นํ๊ณ ์๋ค.
๋๊ท๋ ์ฃผ๋ฏธ๊ฐ ๋๋ฌด ๋ณด๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๋นจ๋ฆฌ ์ฃผ๋ฏธ์๊ฒ ๊ฐ๊ธฐ ์ํด A, B ๋งํผ์ ํ์ ๊ฐ์ง ์ค์นด์ด ์ฝฉ์ฝฉ์ ๊ฐ์ ธ์๋ค.
ํ ์์น์์ +1์นธ, -1์นธ์ ์ด๋ํ ์ ์๊ณ , ์ค์นด์ด ์ฝฉ์ฝฉ์ ์ด์ฉํด ํ ์์น์์ A๋ B๋งํผ ์ข์ฐ๋ก ์ ํํ ์ ์์ผ๋ฉฐ,
์๊ฐ์ ์ผ๋ก ํ์ ๋ชจ์ ํ ์์น์ A๋ฐฐ ๋ B๋ฐฐ์ ์์น๋ก ์ด๋์ ํ ์ ์๋ค.์ด๋ ๊ณผ์ ์์ 100,000๋ณด๋ค ํฌ๊ฑฐ๋ 0๋ณด๋ค ์์ ๋ฒํธ์ ๋์ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๊ฐ ์ ์๊ณ ,
๊ฐ์ ๋ฐฉ๋ฒ์ ๊ณ์ ์ฌ์ฉํด๋ ๋๋ฉฐ ํญ์ ๋๋ฌํ ์ ์๋ ์ผ์ด์ค๋ง ์ฃผ์ด์ง๋ค.์ฒซ ์ค์ ์ค์นด์ด ์ฝฉ์ฝฉ์ ํ A์ B, ๊ทธ๋ฆฌ๊ณ ๋๊ท์ ํ์ฌ์์น N, ์ฃผ๋ฏธ์ ํ์ฌ ์์น M์ด ์ฃผ์ด์ง๋ค.
(๋จ, 2 <= A, B <= 30 ์ด๊ณ 0 <= N, M <= 100,000)๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin from collections import deque a, b, n, m = map(int, stdin.readline().split()) dp = [-1 for _ in range(100001)] def solve(): q = deque() q.append(n) dp[n] = 0 while q: x = q.popleft() for i in (x * a, x * b, x + a, x - a, x + b, x - b, x + 1, x - 1): if 0 < i < 100001: if dp[i] == -1: dp[i] = dp[x] + 1 q.append(i) solve() print(dp[m])
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
3 7 2 98500
์คํ๊ฒฐ๊ณผ
10
โจ๏ธ ๋ฌธ์ ํ์ด
-1๋ก ์ฑ์์ง dp ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค. ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๋๋ค๋ฆฌ๋ ๊ฑด๋์ง ์์ ๊ฒ์ด๋ค.
์ฆ, -1์ด ์๋ ๋๋ค๋ฆฌ๋ง ๋ฐ๊ณ ๊ฐ ๊ฒ์ด๋ค. ํ์ฌ ์์น n์ 0์ผ๋ก ๊ฐฑ์ ํด์ค๋ค.
๋ํ ํ์ n์ ๋ฃ์ด ์ด๋์ ์์ํ๋ค.์กฐ๊ฑด (3)๋ฒ์ ์จ๋์๋ ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ๊ณ์ฐ๊ฐ์ ์ํํ๋ฉด์ 0 ๊ณผ 100000 ๊ฐ ์ฌ์ด์ ์๋์ง ํ์ธํ๋ค.
(2)๋ฒ์ ์กฐ๊ฑด์ ํด๋นํ๋ค๋ฉด, dp[i] ์ ๊ฐ์ ํ์ฌ ์์น์ ํด๋นํ๋ ์ด๋ ๊ฐ์์ + 1ํ ๊ฐ์ ์ ์ฅํด์ค๋ค.
์ด๋ํ ๋๋ค๋ฆฌ์ ๋ฒํธ๋ฅผ ํ์ ๋ฃ์ด์ค๋ค.
ํ๊ฐ ๋น์ด์ ๋๋๊ฒ ๋๋ฉด, N์์ ์ถ๋ฐํ์ฌ M๊น์ง ๊ฐ๋ ์ต์ ์ด๋ํ์ dp[M]์ ์ถ๋ ฅํ๋ค.
๐พ ๋๋์
- ์จ๋ฐ๊ผญ์ง๊ณผ ๋น์ทํ ๋๋. ์ํ์ผ๋ก ์ขํ์ด๋์ ํ๋ค๊ณ ์๊ฐํ๊ณ ํ์ดํ๋ ์ฝ๊ฒ ํ๋ ธ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1145 ์ ์ด๋ ๋๋ถ๋ถ์ ๋ฐฐ์ with Python (0) 2022.03.29 [๋ฐฑ์ค] 1038 ๊ฐ์ํ๋ ์ with Python (0) 2022.03.23 [๋ฐฑ์ค] 11104 Fridge of Your Dreams with Python (0) 2022.03.22 [๋ฐฑ์ค] 10211 Maximum Subarray with Python (0) 2022.03.22 [๋ฐฑ์ค] 8974 ํฌ์ฃผ์ ์ํ์ํ with Python (0) 2022.03.21