π programmers λ±λ
νλ‘μ νΈ λλκ³ μ λ²μ λͺ» νμλ λ¬Έμ νμ΄λ³΄λ €κ³ νλλ° λ κ°μ§ λ°©λ²μΌλ‘ μ κ·Όνλλ° μνλ¦°λ€...
μ°Ύμλ΄€λλ μ΄λ €μ΄ λ¬Έμ κΈ°λ νλλΌ (μΉκ΅¬κ° 골λλλ° μ λ€ λͺ»νμ λμ νλ©Έμ μΈ λμ΄λ)
μΌλ¨ λ λ°©λ² λͺ¨λ κΈ°λ‘ν΄ λ³΄λ €κ³ νλ€ γ
λͺ»νμμ§λ§...
- 1λ² νμ΄
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) path_list = sorted(path_dict.items(), key=lambda x:len(x[1])) path_list = [[x[0], x[1], len(x[1])] for x in path_list] cnt = 0 while path_list: pop_n, pop_path, pop_cnt = path_list.pop() cnt += 1 for x in range(len(path_list)): if path_list[x][2] != 0 and pop_n in path_list[x][1]: path_list[x][2] -= 1 if sum([x[2] for x in path_list]) == 0: break path_list.sort(key=lambda x:x[2]) return cnt
μ μ¬μ§κ³Ό κ°μ΄ κ° λ Έλμμ λ§μ κΈ°μ€μΌλ‘ μ λ ¬μ νλ©΄
λΉ¨κ°μ λΆλΆμ΄ κ°μ₯ λ¨Όμ λΉ μ§κ³ , κ·Έ λ€μ λ Έλλ€μ μ λ ¬,
νλμ -> κ²μ μ μμΌλ‘ λΉ μ§λ©° κ·Έ νμλ₯Ό return νλ€.
νμ§λ§ μ½λλ‘ κ΅¬ννλ©΄ sortλ₯Ό κ²μ ν΄μ£Όκ² λκ³ μκ° λ³΅μ‘λμμ νλ½νλ€. λ¬Όλ‘ μ½λλ μ§κΈ μλ²½ν ꡬνν κ²μ μλλ€...
- 2λ² νμ΄
from collections import defaultdict, deque def solution(n, lighthouse): # start pointλ₯Ό μ‘λλ€ - 맨 λμ μλ λ Έλ path = defaultdict(list) for a, b in lighthouse: path[a].append(b) path[b].append(a) light_list, visited = set(), set() start = -1 for key, val in path.items(): if len(val) == 1: start = key light_list.add(val[0]) break queue = deque([start]) while queue: temp = queue.popleft() visited.add(temp) state = True for i in path[temp]: if i in light_list: state = False for i in path[temp]: if i in visited: continue queue.append(i) if state and temp not in light_list: light_list.add(temp) return light_list
BFS λ₯Ό μκ°νμ¬ μ μ λ Έλκ° λ°©λ¬Έ νλμ§λ₯Ό 체ν¬, μ μ λ Έλκ° λΆμ΄ μΌμ Έμλμ§λ₯Ό 체ν¬νλ©° λΆμ ν¨λ€.
λΉμ°ν μλλ€. ν μ€νΈμΌμ΄μ€ 1μμ λΆμ΄μλ λ Έλκ° λΆμ΄ μΌμ ΈμκΈ° λλ¬Έ... μ¬λ¬κ°μ§λ₯Ό ν΄λ³΄λ €λ€κ° λͺ»νμλ€.
- μ‘λ΄
BFSλ‘ νΈλκ²μ΄ λ§λ κ² κ°κΈ°λ νλ° μμ§ μμ΄λμ΄λ₯Ό μ°Ύμ§ λͺ»νλ€... μ λ΅μκ° 71λͺ μ΄λΌ κ²μν΄λ λμ€μ§ μλκ²μ΄ λ΅λ΅νλ€..
λ΄μΌ λ€μ νμ΄λ΄μΌκ² λ€.