2021. 4. 15. 23:02ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
์์ ์ด๋ ๋งค์ฐ ๊ธฐ์๊ธฐ ๋๋ฌธ์, ํจ๋น์ด์๊ฒ ์ค๋ง์ผ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ณด๋ด๋ ค๊ณ ํ๋ค.
์์ ์ด๋ ์ด๋ฏธ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ 1๊ฐ๋ฅผ ์ ๋ ฅํ๋ค. ์ด์ , ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ์ฐ์ฐ๋ง ์ฌ์ฉํด์ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํ๋ค.
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๋ณต์ฌํด์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ๋ค.
- ํด๋ฆฝ๋ณด๋์ ์๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค.
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ์ค ํ๋๋ฅผ ์ญ์ ํ๋ค.
๋ชจ๋ ์ฐ์ฐ์ 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. ๋, ํด๋ฆฝ๋ณด๋์ ์ด๋ชจํฐ์ฝ์ ๋ณต์ฌํ๋ฉด ์ด์ ์ ํด๋ฆฝ๋ณด๋์ ์๋ ๋ด์ฉ์ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๋ค. ํด๋ฆฝ๋ณด๋๊ฐ ๋น์ด์๋ ์ํ์๋ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ ์ ์์ผ๋ฉฐ, ์ผ๋ถ๋ง ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ์๋ ์๋ค. ๋ํ, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ์ค ์ผ๋ถ๋ฅผ ์ญ์ ํ ์ ์๋ค. ํ๋ฉด์ ์ด๋ชจํฐ์ฝ์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ๊ฐ์๊ฐ ํ๋ฉด์ ์ถ๊ฐ๋๋ค.
์์ ์ด๊ฐ S๊ฐ์ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ง๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅํ์
์ฒซ์งธ ์ค์ S (2 ≤ S ≤ 1000) ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅํ์
์ฒซ์งธ ์ค์ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์๊ฐ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
BFS ๋ฌธ์ ์ธ๊ฑด ์์์ผ๋ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ๋ ์ง ์ ํ ๊ฐ์ด ์กํ์ง ์์ ํด๋ต์ ๋ณด๊ณ ์ดํดํ ์ ์์๋ค.
์ด ๋ฌธ์ ์ ์์ด๋์ด๋ ํด๋ฆฝ๋ณด๋์ ์ด๋ชจํฐ์ฝ ๊ฐ์์ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ ๊ฐ์๊ฐ ๋ค๋ฅผ ์ ์๋ค๋ ๊ฒ์ ๋ช ์ฌํด์ผ ํ๋ ๋ฌธ์ ์๋ค.
๊ทธ๋์ s - ํ๋ฉด์ ์ถ๋ ฅ๋ ์ด๋ชจํฐ์ฝ ๊ฐฏ์, c - ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์ ๋ก ์ค์ ํ๊ณ ,
BFS queue๋ฅผ ๊ณ์ ๋๋ฉด์
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๋ณต์ฌํด์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ๋ค.
- ํด๋ฆฝ๋ณด๋์ ์๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค.
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ์ค ํ๋๋ฅผ ์ญ์ ํ๋ค.
์ธ๊ฐ์ง์ ํ์๋ฅผ ํด์ฃผ๋ฉด ํ ์ ์์๋ค.
1๋ฒ์ ๋ชจ๋ ๋ณต์ฌํ๋ ๊ฒ์ด๋ฏ๋ก (S,C) -> (S,S) ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋์๊ณ ,
2๋ฒ์ ํด๋ฆฝ๋ณด๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ด๋ ๊ฒ์ผ๋ฏ๋ก, (S,C) -> (S+C, C)๋ก
3๋ฒ์ ํ๋ฉด ์ด๋ชจํฐ์ฝ ์ค ํ๋๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด๋ฏ๋ก (S,C) -> (S-1,C)๋ก ๋ณํํด์ฃผ๋ฉด ๋์๋ค.
from collections import deque
def bfs(n):
queue = deque()
queue.append((1,0))
emoji[1][0] = 0
while queue:
s,c = queue.popleft()
if emoji[s][s] == -1:
emoji[s][s] = emoji[s][c] +1
queue.append((s,s))
if s+c <= n and emoji[s+c][c] == -1:
queue.append((s+c,c))
emoji[s+c][c] = emoji[s][c] +1
if s-1 >= 0 and emoji[s-1][c] == -1:
queue.append((s-1,c))
emoji[s-1][c] = emoji[s][c] +1
if __name__ == '__main__':
n = int(input())
emoji = [[-1 for _ in range(n+1)] for _ in range(n+1)]
bfs(n)
ans = -1
for i in range(n+1):
if emoji[n][i] != -1:
if ans == -1 or ans > emoji[n][i]:
ans = emoji[n][i]
print(ans)
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ๋ฐฑ์ค 16928] ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2021.04.15 |
---|---|
[Python - ๋ฐฑ์ค 13913] ์จ๋ฐ๊ผญ์ง4 (0) | 2021.04.15 |
[Python - ๋ฐฑ์ค 1697] ์จ๋ฐ๊ผญ์ง (0) | 2021.04.15 |