ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฎคํ๋ฆฌ์คํฌ๋ ํ ๋ฒ์ 3๋ง๋ฆฌ์ SCV๋ฅผ ๊ณต๊ฒฉํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ๊ณต๊ฒฉ์ 9, ๋ ๋ฒ์งธ ๊ณต๊ฒฉ์ 3, ์ธ ๋ฒ์งธ ๊ณต๊ฒฉ์ 1๋ก ์ฒด๋ ฅ์ ๊ฐ์์ํฌ ๋, ๋ชจ๋ SCV์ ์ฒด๋ ฅ์ด 0์ด ๋๋ ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒฝ์ฐ์ ๊ณต๊ฒฉ ํ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
DFS๋ฅผ ํตํด์๋ ํ ์ ์์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด BFS๋ฅผ ํตํด ํ์์ ์งํํ์ฌ ๋ฌธ์ ์ ๋ต์ ์ฐพ์๋ค.
- (9, 3, 1)๋ก ๊ณต๊ฒฉ ๊ฐ๋ฅํ ํจํด์ `permutation`์ ํ์ฉํ์ฌ ๊ตฌํ๋ค.
- BFS๋ฅผ ํตํด ๊ณต๊ฒฉ ๊ฐ๋ฅํ ํจํด๋งํผ ๊ฐ์ง๋ฅผ ํ์ฅํด ๋๊ฐ๋ค.
- ์ด๋, scv3์ ์ฒด๋ ฅ์ด ๊ฐ์ฅ ๋์ ์ํ๋ก ์ ๋ ฌํด์ ๋๊ฐ๋ค.
- ์ฌ๋ฐฉ๋ฌธ์ ๋ง๊ธฐ ์ํด `visited`๋ฅผ 3์ฐจ์ ๋ฐฐ์ด๋ก ์ฒด๋ ฅ์ ํฌ๊ธฐ๋งํผ ๋ง๋ค์ด ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ค.
- scv๋ค์ ์ฒด๋ ฅ์ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก, ์ธ ๋ฒ์งธ scv์ ์ฒด๋ ฅ์ด 0์ด ๋๋ค๋ฉด BFS ํ์์ ์ข ๋ฃํ๋ค.
์ฝ๋
from sys import stdin
from itertools import permutations
from collections import deque
def bfs():
q = deque([[*scv, 0]])
while q:
cur_state = q.popleft()
# ์ ๋ ฌ๋ ์ํ์์ ์ฒด๋ ฅ์ด ํฐ SCV์ ์ฒด๋ ฅ์ด ์๋ค๋ฉด ์ข
๋ฃ.
if cur_state[THREE] == 0:
return cur_state[CNT]
# ๊ณต๊ฒฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋งํผ ํ์ ์ถ๊ฐ.
for case in attack_case:
next_scv = [0] * 3
# visited์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด 0๋ณด๋ค ์์ ๊ฒฝ์ฐ 0์ผ๋ก ๋ณํ.
for i in range(3):
next_scv[i] = \
cur_state[i] - case[i] if cur_state[i] - case[i] > 0 else 0
# ์ ๋ ฌ๋ ์ํ๋ก ํ์ ์ถ๊ฐ.
next_scv.sort()
if not visited[next_scv[ONE]][next_scv[TWO]][next_scv[THREE]]:
visited[next_scv[ONE]][next_scv[TWO]][next_scv[THREE]] = True
q.append([*next_scv, cur_state[CNT] + 1])
if __name__ == '__main__':
ONE, TWO, THREE, CNT = 0, 1, 2, 3
n = int(stdin.readline())
# n์ด 3๋ณด๋ค ์์ ๊ฒฝ์ฐ, 0์ ์ถ๊ฐํด์ฃผ์ด n์ด 1, 2์ธ ๊ฒฝ์ฐ ๋ณ๋๋ก ์ฒ๋ฆฌํ์ง ์์๋ ๋จ.
scv = sorted(list(map(int, stdin.readline().split())) + (3 - n) * [0])
attack_case = list(permutations([9, 3, 1], 3))
visited = [[[False] * 61 for _ in range(61)] for _ in range(61)]
print(bfs())
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16936 ๋3๊ณฑ2 (0) | 2020.09.26 |
---|---|
๋ฐฑ์ค: 16938 ์บ ํ ์ค๋น (0) | 2020.09.26 |
๋ฐฑ์ค: 16197 ๋ ๋์ (0) | 2020.09.25 |
๋ฐฑ์ค: 15686 ์นํจ ๋ฐฐ๋ฌ (0) | 2020.09.24 |
๋ฐฑ์ค: 2210 ์ซ์ํ ์ ํ (0) | 2020.09.24 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ