์ฒซ๋ฒ์งธ BFS ํ์ด
1from collections import deque
2
3def solution(storey):
4 answer = 0
5 q = deque()
6 q.append((storey, 0))
7 visited = [False] * (10**8+1)
8
9 while q:
10 cur, cnt = q.popleft()
11
12
13 visited[cur] = True
14 while cur != 0 and cur%10 == 0:
15 cur = cur // 10
16 if cur == 0:
17 answer = cnt
18 break
19 for j in [-1, 1]:
20 dest = cur + j
21 if 0 <= dest <= 10**8 and not visited[dest]:
22 q.append((dest, cnt+1))
23
24 return answer
๊ฐ์ ํ DFS ํ์ด
1answer = 10**8
2def dfs(cur, cnt):
3 global answer
4 if cur == 0:
5 answer = min(answer, cnt)
6 return
7 while cur % 10 == 0:
8 cur /= 10
9
10 if cur%10 < 5:
11 dfs(cur//10, cnt+(cur%10))
12 elif cur%10 > 5:
13 dfs(cur//10+1, cnt+(10-cur%10))
14 else:
15 dfs(cur//10, cnt+(cur%10))
16 dfs(cur//10+1, cnt+(10-cur%10))
17
18def solution(storey):
19 dfs(storey, 0)
20 return answer
๋ฌธ์
- ์ฃผ์ธ๊ณต ๋ฏผ์๋ ํ๋ฒ ์๋ ๋ฒ ์ดํฐ๋ฅผ ํ๋ฉด -1, +1, -10, +10 ๋ฑ ์ ๋๊ฐ์ด $10^c$ (c>=0์ธ ์ ์) ๋งํผ ์ด๋ ํ ์ ์๋ค
- 0์ธต๊น์ง ๊ฐ๋ ค๋ฉด ์ต์ ๋ช ๋ฒ ๋ง์ ์ด๋ํ ์ ์๋์ง ๊ตฌํ๋ผ
- 1 <= storey <= 100,000,000
- TC