|
์ฝ๋ ์์ฑํ๊ธฐ
# N: ๋ง์ ๊ฐ์: 50์ดํ
# road: 2000๊ฐ ์ดํ
# K: ์ ํ์๊ฐ - 10000 ์ดํ
import numpy as np
def solution(N, road, K):
time_list = [0]*N
location = {1}
# ๋ฐ๋ก ์ฐ๊ฒฐ๋์ด์๋ ๊ฒฝ์ฐ
for line in road:
if line[0] == 1:
# ๊ฐ์ด 0์ด๋ฉด min์ ์ฌ์ฉํ์ง ์๊ณ ๊ทธ ๊ฐ์ ๋ฐ๋ก ๋ฃ๋๋ค.
if time_list[line[1]-1] == 0:
time_list[line[1]-1] = line[2]
# ์ด์ ์ ๊ฐ์ด ๋ค์ด์๋ ๊ฒฝ์ฐ๋ ๋ ์์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
else: time_list[line[1]-1] = min(line[2], time_list[line[1]-1])
location.add(line[1])
elif line[1] == 1:
if time_list[line[0]-1] == 0:
time_list[line[0]-1] = line[2]
else: time_list[line[0]-1] = min(line[2], time_list[line[0]-1])
location.add(line[0])
# 50๊ฐ๊น์ง๋ง ์กด์ฌ -> 50๋ฒ ์ด๋ด์ ๋ค ์ฐ๊ฒฐ๋ ๊ฒ
for i in range(50):
for line in road:
# ๋์ผํ ๋์๋ค์ ์ด์ด์ฃผ๋ ๋ค๋ฅธ ๋ฃจํธ๊ฐ ์์ผ๋ฏ๋ก 1๊ณผ ์ฐ๊ฒฐ๋ ๋์์์๋ ๋ฐ๋์ 0์ธ์ง ํ์ธํด์ผ ํจ
if line[0] in location:
if time_list[line[1]-1] == 0:
time_list[line[1]-1] = time_list[line[0]-1] + line[2]
location.add(line[1])
else:
time_list[line[1] - 1] = min(time_list[line[0] - 1] + line[2], time_list[line[1]-1])
location.add(line[1])
if line[1] in location:
if time_list[line[0]-1] == 0:
time_list[line[0]-1] = time_list[line[1]-1] + line[2]
location.add(line[0])
else:
time_list[line[0] - 1] = min(time_list[line[1] - 1] + line[2], time_list[line[0]-1])
location.add(line[0])
print(time_list)
# 1๋ฒ์ ๋ฐ๋์ 0์๊ฐ์ด ๊ฑธ๋ฆผ -> K์๊ฐ์ด ๋๋๋ผ๋ count๋์ง ์๋๋ก ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค -> [1:]
# np.where๋ก K๋ณด๋ค ํฐ ๊ฒฝ์ฐ์ ๊ฐ์๋ฅผ ๊ตฌํ ํ N์์ ๋บ๋ค(<= ์ฐ์ฐ์ np.where์์ ๋จนํ์ง ์์)
return N - len(np.where(np.array(time_list[1:]) > K)[0])
print(solution(5, [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]], 3))
print(solution(6, [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]], 4))
print(solution(7, [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1], [1,7,2], [2,7,6]], 4))
print(solution(6, [[1,2,1],[2,1,4],[1,3,2],[3,1,3],[2,3,2],[3,4,3],[4,3,5],[3,5,2],[3,5,3],[5,6,1]], 4))
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
1๋ฒ ๋์๊น์ง ๋๋ฌํ๋ ์ต์ ์๊ฐ ๊ตฌํ๊ธฐ โ ๋ฆฌ์คํธ์ 1๋ฒ๋์๊น์ง์ ๋ฐฐ๋ฌ์๊ฐ์ ๊ธฐ๋กํ์ฌ K ์ดํ ์ธ์ง๋ฅผ ๋น๊ตํ๋ค.