โ๋ฌธ์
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
โ๐ปํ์ด
์์ ๋ ํ์ฌ, ์ง, N๋ช ์ ๊ณ ๊ฐ ์ขํ๋ฅผ ์์๋๋ก ์ค๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ์ ๋จผ์ ํ์ฌ์ ์ง์ ์ขํ๋ฅผ ๋จผ์ ๊ตฌํด ์์์ ๊ณผ ๋์ ์ ์ฐพ๋๋ค.
์์์ ์ ํ์ฌ๋ก ํ์ฌ ํ์ฌ์ ๊ฐ๊น์ด ๊ณ ๊ฐ์ ๊ฐ์ง์น๊ธฐ๋ก ํ๋ฉด์ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ๊ฐ ๊ณ ๊ฐ ๊ฐ์ ๊ฐ๊น์ด ๊ณณ์ ๊ฐ์ง์น๊ธฐํ๋ฉด์ ์ฐพ๊ณ ๋ง์ง๋ง์ ๋ง์ง๋ง์ผ๋ก ๋ฐฉ๋ฌธํ ๊ณ ๊ฐ๊ณผ ์ง๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
๐ป์ฝ๋
def backtracking(visited, pre, cnt, dist):
global res
if cnt == N:
r = abs(home[0]-clients[pre][0]) + abs(home[1]-clients[pre][1])
res = min(res, dist+r)
return
for i in range(N):
if not visited[i]:
if cnt == 0:
r = abs(company[0]-clients[i][0]) + abs(company[1]-clients[i][1])
visited[i] = True
backtracking(visited, i, cnt+1, dist+r)
visited[i] = False
else:
visited[i] = True
r = abs(clients[pre][0]-clients[i][0]) + abs(clients[pre][1]-clients[i][1])
backtracking(visited, i, cnt+1, dist+r)
visited[i] = False
test_case = int(input())
for tc in range(1, test_case+1):
res = 1e9
N = int(input()) # ๊ณ ๊ฐ ์
visited = [False] * N
# ํ์ฌ, ์ง, ๊ณ ๊ฐ
coords = list(map(int, input().split()))
company = coords[:2]
home = coords[2:4]
clients = []
for i in range(4, len(coords), 2):
clients.append((coords[i], coords[i + 1]))
backtracking(visited, -1, 0, 0)
print(f"#{tc} {res}")
๐ํ๊ธฐ
์ฒ์์๋ ์ต์์ ์ฅํธ๋ฆฌ์ธ๊ฐ ์๊ฐํ๋๋ฐ ๊ทธ๋ฌ๋ฉด ์ผ์ผํ ๊ฐ์ค์น ๊ณ์ฐํด์ผ ํ๋๊น ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ๋ค๊ณ ๋๊ปด์ก๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ญ๊ฐ ์์๊นํ๊ณ ๋ฐ์ ๋๊ธ๋ณด๋๊น DFS๋ผ๊ณ ํด์ ์ด๊ฑธ DFS๋ก ์ด๋ป๊ฒ ํ์ง ์์ฒญ ๊ณ ๋ฏผํ๋ค..์ฝํ ๊ณต๋ถ๋ฅผ ๋๋ฌด ์ค๋๋ง์ ํด์ ๊ทธ๋ฐ์ง ์ด๋ ต๋ค...
๊ทธ๋ฆฌ๊ณ ์ญ์ ํ์ด์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ฐจ์งํ๋ค...๊ฒ๋ค๊ฐ ์ผ์ฑ์ PyPy๋ก ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฐจ์งํ๋ค...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 1218. ๊ดํธ ์ง์ง๊ธฐ/Python - D4 (0) | 2025.07.05 |
---|---|
[SWEA] 1226. ๋ฏธ๋ก1/Python - D4 (0) | 2025.07.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์คํฌํธ๋ฆฌ/Python - Lv.2 (0) | 2025.06.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฉ๋ฌธ ๊ธธ์ด/Python - Lv.2 (1) | 2025.06.21 |
[๋ฐฑ์ค] 11401. ์ดํญ ๊ณ์ 3/Python - Gold1 (0) | 2025.06.19 |