728x90
๋ฐ์ํ
๋ฌธ์ ์ค๋ช
n๊ฐ์ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ๋ ๋น์ฉ(costs)์ด ์ฃผ์ด์ง ๋, ์ต์์ ๋น์ฉ์ผ๋ก ๋ชจ๋ ์ฌ์ด ์๋ก ํตํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ๋ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution์ ์์ฑํ์ธ์.
๋ค๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ฑด๋๋๋ผ๋, ๋๋ฌํ ์๋ง ์์ผ๋ฉด ํตํ ๊ฐ๋ฅํ๋ค๊ณ ๋ด ๋๋ค. ์๋ฅผ ๋ค์ด A ์ฌ๊ณผ B ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์๊ณ , B ์ฌ๊ณผ C ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์์ผ๋ฉด A ์ฌ๊ณผ C ์ฌ์ ์๋ก ํตํ ๊ฐ๋ฅํฉ๋๋ค.
์ ํ ์ฌํญ
- ์ฌ์ ๊ฐ์ n์ 1 ์ด์ 100 ์ดํ์ ๋๋ค.
- costs์ ๊ธธ์ด๋ ((n-1) * n) / 2์ดํ์ ๋๋ค.
- ์์์ i์ ๋ํด, costs[i][0] ์ costs[i] [1]์๋ ๋ค๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ ์ฌ์ ๋ฒํธ๊ฐ ๋ค์ด์๊ณ , costs[i] [2]์๋ ์ด ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ ๋ ๋๋ ๋น์ฉ์ ๋๋ค.
- ๊ฐ์ ์ฐ๊ฒฐ์ ๋ ๋ฒ ์ฃผ์ด์ง์ง ์์ต๋๋ค. ๋ํ ์์๊ฐ ๋ฐ๋๋๋ผ๋ ๊ฐ์ ์ฐ๊ฒฐ๋ก ๋ด ๋๋ค. ์ฆ 0๊ณผ 1 ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, 1๊ณผ 0์ ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ชจ๋ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ ๊ฑด์ค ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ ์ฌ ์ฌ์ด์ ๊ฑด์ค์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
- ์ฐ๊ฒฐํ ์ ์๋ ์ฌ์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
n | costs | return |
4 | [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] | 4 |
์ ์ถ๋ ฅ ์ ์ค๋ช
costs๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด๋ ์ด๋ก์ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ๋ชจ๋๋ฅผ ํตํํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
ํ์ด
- ์๊ฑด ์ ๋ท๊ฑธ์์ง ์น๋ค ๋ง์ถค.
- ์ง์ง ์ฌ๋ฌ๋ฒ ํ๋ ธ๋ค.
def solution(n, costs):
cost = 0
island = [i for i in range(n)]
visited = [0 for i in range(n)]
costs = [c for c in costs if c[2] != 0]
costs.sort(key=lambda x:x[2])
for i in range(len(costs)):
isl1 = min(costs[i][0],costs[i][1])
isl2 = max(costs[i][0],costs[i][1])
#print(island, "cost:",cost)
#print(visited, "find:", isl1, "->", isl2)
if visited[isl1] == 1 and visited[isl2] == 1:
if island[isl1] != island[isl2]:
source = island[isl2]
target = island[isl1]
for z in range(len(island)):
if island[z] == source:
island[z] = target
cost += costs[i][2]
elif visited[isl1] == 0 or visited[isl2] == 0:
visited[isl1] = 1
visited[isl2] = 1
source = island[isl2]
target = island[isl1]
for z in range(len(island)):
if island[z] == source:
island[z] = target
cost += costs[i][2]
return cost
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.4MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.02ms, 10.3MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.03ms, 10.4MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.05ms, 10.1MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.04ms, 10.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.07ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.12ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.03ms, 10.3MB)
- ๊ณ ์์ ํ์ด. ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ค ใ ใ ใ
import heapq as hq
def solution(n, costs):
answer = 0
from_to = list(list() for _ in range(n))
visited = [False] * n
priority = []
for a, b, cost in costs:
from_to[a].append((b, cost))
from_to[b].append((a, cost))
hq.heappush(priority, (0, 0))
while False in visited:
cost, start = hq.heappop(priority)
if visited[start]: continue
visited[start] = True
answer += cost
for end, cost in from_to[start]:
if visited[end] : continue
else:
hq.heappush(priority, (cost, end))
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.02ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.06ms, 10.4MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.02ms, 10MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.11ms, 10.4MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.02ms, 10.3MB)
- ๊ทธ๋๋ง ์ด์ชฝ์ด ์ข ๋ ์ดํด๊ฐ ์ฝ๋ค.
- ๋๋ ๋น์ทํ ๊ฑฐ ๊ฐ์๋ฐ, Visited๋ sortedCost๋ฅผ ์ง์ฐ๋ฉด์ ํ๋๋ฐ๋ ๋น ๋ฅด๋ค...
def solution(n, costs):
answer = 0
V = set()
for v1, v2, cost in costs:
V.add(v1)
V.add(v2)
sortedCosts = sorted(costs, key = lambda x: x[2])
visited = set()
visited.add(V.pop())
while V:
for i in range(len(sortedCosts)):
v1, v2, cost = sortedCosts[i]
if v1 in visited and v2 in visited:
sortedCosts.pop(i)
break
elif v1 in visited or v2 in visited:
if v1 in V:
V.remove(v1)
if v2 in V:
V.remove(v2)
visited.add(v1)
visited.add(v2)
answer += cost
sortedCosts.pop(i)
break
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.2MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.02ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.02ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.05ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.02ms, 10.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.02ms, 10.2MB)
- ๋ด ๋ฌธ์ ์ ์ด ๋ญ๊ฐ ๊ธธ์ฐพ๊ธฐ๋ ์ง๋๋ ๊ทธ๋ํ ๋ฌธ์ ๋์ค๋ฉด 2์ฐจ์ ๋ฐฐ์ด๋ถํฐ ๊ทธ๋ฆด๋ ค๊ณ ํด์ ์๊ฐ์ ๋ญ๋นํ๋ ๊ฒ ๊ฐ๋ค.
- ๊ณ ์น ์ ์ธ ๋ฏ...
728x90
๋ฐ์ํ
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > Python ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์ซ์๊ฒ์ Summer/Winter Coding (~2018) (0) | 2023.02.28 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ๊ดํธ๋ณํ (2020 KAKAO BLIND RECRUITMENT) (0) | 2023.02.27 |
ํ๋ก๊ทธ๋๋จธ์ค ๋จ์์นด๋ฉ๋ผ ... ํ์๋ฒ (0) | 2023.02.27 |
ํ๋ก๊ทธ๋๋จธ์ค ์คํฌ ์ฒดํฌ ํ ์คํธ Level 3 ํ๋ฝ ใ ใ ใ (0) | 2023.02.27 |
ํ๋ก๊ทธ๋๋จธ์ค ๋ฑ๊ตฃ๊ธธ (๋์ ๊ณํ๋ฒ, Dynamic Programming) (0) | 2023.02.27 |