๐ programmers ๋ฑ๋ Level3
์ ๋๋์ด ํ์๋ค 2์ผ์ ๋ ๊ฑธ๋ฆฐ๊ฑฐ ๊ฐ์๋ฐ ์ฃผ๋ง ํฌํจ 4์ผ? ์ ํ์๋ง์ ์ ๋๊ฑฐ๋ผ ๊ธฐ๋ถ์ด ๋๋ฌด ์ข๋ค ใ ใ from collections import defaultdict def solution(n, lighthouse): path_dict = defaultdict(list) for a, b in lighthouse: path_dict[a].append(b) path_dict[b].append(a) result = 0 while path_dict: for end_node, side_node in path_dict.copy().items(): if len(side_node) == 1 and end_node in path_dict: temp = side_node[0] del_node_list = [x for x in path_dict[temp]] del path_dict[temp] for i in del_node_list: path_dict[i].remove(temp) if not path_dict[i]: del path_dict[i] result += 1 return result
- ํด์ค
- path_dict๋ก ์๋ฐฉํฅ ๊ธธ์ ๋ง๋ค์ด ์ค๋ค.
- len(side_node) == 1 -> ํด๋น if ๋ฌธ์์ ๋ ๋ ธ๋๊ฐ ๊ฑธ๋ฆด๊ฒ์ด๊ณ ํด๋น ๋ ธ๋ ๋ฐ๋ํธ์ ๋ถ์ ์ผ์ค ํ (result += 1) ์๋ณธ dict์์ ์ ๊ฑฐ
- ์๋ฐฉํฅ์ผ๋ก ๋ง๋ค์ด ์ฃผ์์ผ๋ฏ๋ก ๋ถ ์ผ์ง ๋ฐ๋ํธ ๋ ธ๋๋ค์์ ์ผ์ง ๋ฐฉํฅ์ผ๋ก ๊ธธ์ remove ํ ๊ฐ์ด ์์ผ๋ฉด ํด๋น ๋ ธ๋๋ dict์์ ์ ๊ฑฐ
๐ ๋ต์ ๋ณผ๊น ํ๋ ์๊ฐ๋ ์์์ง๋ง ์ ์ด์ ๋ต๋ ์์๊ณ ํ๋ก๊ทธ๋๋จธ์ค์ ๋ค๋ฅธ์ฌ๋ ํ์ด ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ ์๋ฅผ ๋๋ฌด ๋ง์ด ๊ฐ์ ธ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ฅผ ์๋๊ฐ ๋์ง ์์๋ค.
๋ฌธ์ ๋ฅผ ํผ ํ ๋ค๋ฅธ ์ฌ๋๋ค ํ์ด๋ฅผ ๋ณด๋ dfs๋ก ๋ง์ด ํผ ๊ฒ ๊ฐ๋ค.
๋๋ dfs๋ก ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.์ด ๋ฌธ์ ์ก๊ณ ์๋๋ผ ๋ญ ์๋ฌด๊ฒ๋ ๋ชปํ๋ค ;
์ค๋ ๋ง์กฑ์ค๋ฝ๊ฒ ๋!