๐ programmers ๋ฑ๋ ์ด์ ํ๋๊ฑฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํด ๋ณด์๋ค.
ํผ ์น๊ตฌ์๊ฒ ์ ๊ทผ ๋ฐฉ๋ฒ๋ง ๋ฌผ์ด๋ณด๊ณ ๊ทธ๊ฑธ ํ ๋๋ก ํ์ด๋ณด์๋ค.
- ๊ธฐ๋ณธ ํ
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
์ ์ฝ๋๋ ์ ๋ฐ๋ ๊ฒ ๊ฐ๋ค.
์ ์ฝ๋๋ฅผ ์์์ผ๋ก ํด๊ฒฐ ๋ฐฉ์์
path_dict ๋์ ์ด๋ฆฌ๋ฅผ while ๋ฌธ์ผ๋ก ๋๋ฉฐ ๋์ ๋ ธ๋๋ฅผ ์ฐพ์ ํด๋น ๋ ธ๋์ ๋ฌผ๋ ค์๋ key ๋ ธ๋๋ฅผ path_dict์์ ์ง์ด ํ ์ญ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ๊ฒ๋ ์ง์์ค๋ค.
์ ๋ฐฉ๋ฒ์ ๋ฐ๋ณตํ๋ฉด ๋ชจ๋ ๋ ธ๋๋ฅผ ์ง์ฐ๊ฒ ๋์ด ์๋ค.
3๋ฒ์ ๋ ํ์ด๋ดค๋๋ฐ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋คใ ใ ใ ใ
๊ทธ๋๋ ํ์ด๋ ์ฌ๋ ค ๋ณธ๋ค.
- ์ฒซ ๋ฒ์งธ
while path_dict: for end_node, side_node in path_dict.items(): if not side_node: del(path_dict[end_node]) if len(side_node) == 1: # val ์ด ์ค์ฌ, key ๊ฐ ๋ ๋ ธ๋ del_val = [x for x in path_dict[side_node[0]]] # ๋์ ๋ฌ๋ ค์๋๊ฑฐ ์ ์ฅ need_remove_node = side_node[0] del(path_dict[side_node[0]]) # ์ค์ฌ ๋ ธ๋ ์ ๊ฑฐ # 1 for key, val in path_dict.items(): if need_remove_node in val: val.remove(need_remove_node) result += 1 break
์ ๋ฐฉ๋ฒ ๊ทธ๋๋ก ๋ฌด์ํ๊ฒ ์ง์ฐ๋ฉฐ ์์ํ๋ค.
RuntimeError: dictionary changed size during iteration
for ๋ฌธ ์์์ key๊ฐ์ ์ง์์ ์๋ฌ๊ฐ ๋ฌ๋ค.
- ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
while path_dict: for end_node, side_node in path_dict.items(): if len(side_node) == 1: del_val = [x for x in path_dict[side_node[0]]] need_remove_node = side_node[0] result += 1 break del_list = [] if need_remove_node: del(path_dict[need_remove_node]) for key, val in path_dict.items(): if need_remove_node in val: val.remove(need_remove_node) if not val: del_list.append(key) for dl in del_list: del(path_dict[dl]) need_remove_node = 0
์ด๊ฑด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค. ๋ path_dict.items() ๋ก ๋์ ์ด๋ฆฌ ์์ฒด๋ฅผ for๋ฌธ์ผ๋ก ๋๋ ค for ๋ฌธ ๋ด๋ถ์์ key๊ฐ์ ์ง์ธ ์ ์์ด ์ ์ฝ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ธ๋ฐ ์๋ ์ฝ๋๊ฐ ๋ง์์ง ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ใ ใ์๊ฐํด๋ณด๋ ๋๋ฌด ๊ทธ๋๋ก ์งํํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค dict๋ฅผ ๋ฐ๋ก ๋นผ์ ๋๋ ค์ผํ๋๋ฐ ๋๋ฆฌ๋ ์ค์ ์ง์๋ฒ๋ฆฌ๋ฉด ๋น์ฐํ ์๋๋๋ฐ... ๋ฌด์ง์ฑ ํ์ด๋ฒ...
์๋ฌดํผ ๊ณ์ ์ก๊ณ ์๋ค๊ฐ ๋๋ฌด ๋ฆ์ด์ ์ค๋์ ์ฌ๊น์ง ํ๊ณ .. ๋ค์์ ๋ค์ ๋ณต์ฌํ๊ฑธ๋ก ํ์ด๋ด์ผ๊ฒ ๋ค.