๐ programmers ๋ถ๋๋ณต๊ท level3
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ์ค๊ฐ์ ๋ช๊ฐ๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
์ผ๋จ ๋ฌธ์ ๋ฅผ ๋ฑ ๋ณด๋ ๊ทธ๋ฅ BFS ๋ก ํ๋ฉด ๋ ๊ฑฐ๊ฐ์์ BFS๋ก ๋ฐ๋ก ์ ๊ทผํด๋ดค๋ค. ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ์ถ๋ฐ์ง ์ฆ sources ๊ฐ ์ฌ๋ฌ๊ฐ๋ก ๋์์ ๋๋ ํด๋น ์ถ๋ฐ์ง๋ฅผ ๊ทธ๋ฅ ๋ค ๋๋ ค์ฃผ์๋ค.
์ผ๋จ ํ์ด๋ฅผ ๋ณด์
- ์ฒซ ๋ฒ์งธ ํ์ด
from collections import deque, defaultdict import math def solution(n, roads, sources, destination): roads_path = defaultdict(list) for a, b in roads: roads_path[a].append(b) roads_path[b].append(a) result = [] for so in sources: queue = deque([so]) visited = {x:math.inf for x in range(1, n + 1)} visited[so] = 0 # x -> n ; value -> so ์์ ๊ฑฐ๋ฆฌ while queue: if visited[destination] != math.inf: result.append(visited[destination]) break cur_road = queue.popleft() cur_path = visited[cur_road] for next_road in roads_path[cur_road]: if visited[next_road] > cur_path + 1: visited[next_road] = cur_path + 1 queue.append(next_road) if visited[destination] == math.inf: result.append(-1) return result
์ง๊ธ ์ ์ผ๋ฉด์ ์ ์๋ ๊น ์๊ฐ์ ํด ๋ณธ ๊ฒฐ๊ณผ
BFS ๋ ๋์ฐฉ์ ํ ๊ณณ์ด ์ต์๋ผ๋๊ฒ ๋ณด์ฅ์ด ๋๋๋ฐ ๋๋ ๊ทธ ๊ฒ์ ์ด๊ธฐ๊ณ (?) ๊น์ง๋ ์๋์ง๋ง DP ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๋ ธ๋์ ์ต์๊ฐ์ ๋ฆฌํดํด ์ฃผ์ด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.
visited๋ฅผ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ ์ง์ง ์๊ฐ์ด ๋๋ฌด ๋ฆ์ด์...
๋ด์ผ ํด๋ด์ผ๊ฒ ๋ค.
๐ ํด๋น ๋ฐฉ์์ผ๋ก ์ด๋ฏธ์ง ๋ณํ ์คํ์์ค๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํด๋ณด์๋๋ฐ ์ด๋ค ์ด๋ฏธ์ง๋ ์ ๋๊ณ ์ด๋ค ์ด๋ฏธ์ง๋ ์ ์๋์ด์
์ด์ฌํ ๊ฒ์์ ํด๋ณด์๋ค.
์ค๋ฅ๋ ์ด๋ ๋ค.
์ ๊ฒ์ํด๋ณธ ๊ฒฐ๊ณผ depth: 4 vs 3 ์ด์ชฝ์์ ์ฒ๋ฆฌ๊ฐ ์๋๊ฒ ๊ฐ์๋ค.
์์ ๋ชจ๋ฅด์ง๋ง RGB ๊ฐ์ 4์ฐจ์์ธ์ง 3์ฐจ์์ธ์ง ๊ทธ๋ฐ๊ฒ ์๋ง์์ ์๋๋ ๊ฑฐ๋ผ๊ณ ํ๋ค.
๊ทธ๋์ ํด๋น ์ด๋ฏธ์ง๋ค์ shape ๊ฐ์ ์ถ๋ ฅํด๋ณด์๋ค.
๊ทธ๋ ๋ค. X ํ์๊ฐ ์๋๋ ๋ชฉ๋ก์ธ๋ฐ
์ซ์ 4๋ก ์ฐํ๋ ์ฌ์ง๋ค์ด ์๋๋ ์ฌ์ง๋ค์ด์๋ค.
๊ทธ๋์ ํด๋น ์ฝ๋๋ฅผ ๋ฐ๋ผ๊ฐ์...
์๋ก์ฝ๋กฌ ๋ฐ๊พธ์ด ์ฃผ์๋ค.
4 ๋ณด๋ค ๋์ ์ซ์์ ์ฐจ์์ผ๋ก ์ถ๋ ฅ๋ ์ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง 3์ผ๋ก ๊ณ ์ ์ ์์ผ๋ฒ๋ ธ๋ค.
๊ทธ๋ฌ๋๋ ๋~~ ๋ฌด ์ ๋์จ๋ค.
์ค๋~ ๋!