[TIL_Carrotww] 51 - 22/11/14

์œ ํ˜•์„ยท2022๋…„ 11์›” 14์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
61/138
post-thumbnail

๐Ÿ“Carrotww์˜ ์ฝ”๋”ฉ ๊ธฐ๋ก์žฅ

๐Ÿงฒ python algorithm programmers ๋“ฑ๋Œ€

๐Ÿ” 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

  • ํ•ด์„ค
  1. path_dict๋กœ ์–‘๋ฐฉํ–ฅ ๊ธธ์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  2. len(side_node) == 1 -> ํ•ด๋‹น if ๋ฌธ์—์„œ ๋ ๋…ธ๋“œ๊ฐ€ ๊ฑธ๋ฆด๊ฒƒ์ด๊ณ  ํ•ด๋‹น ๋…ธ๋“œ ๋ฐ˜๋Œ€ํŽธ์— ๋ถˆ์„ ์ผœ์ค€ ํ›„ (result += 1) ์›๋ณธ dict์—์„œ ์ œ๊ฑฐ
  3. ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์œผ๋ฏ€๋กœ ๋ถˆ ์ผœ์ง„ ๋ฐ˜๋Œ€ํŽธ ๋…ธ๋“œ๋“ค์—์„œ ์ผœ์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ๊ธธ์„ remove ํ›„ ๊ฐ’์ด ์—†์œผ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋„ dict์—์„œ ์ œ๊ฑฐ

๐Ÿงฒ ๋ฌธ์ œ ํ›„๊ธฐ

๐Ÿ” ๋‹ต์„ ๋ณผ๊นŒ ํ•˜๋Š” ์ƒ๊ฐ๋„ ์žˆ์—ˆ์ง€๋งŒ ์• ์ดˆ์— ๋‹ต๋„ ์—†์—ˆ๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๋‹ค๋ฅธ์‚ฌ๋žŒ ํ’€์ด ๋ณด๊ธฐ ๊ธฐ๋Šฅ์€ ์ ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ ธ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๋ฅผ ์—„๋‘๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค.

๋ฌธ์ œ๋ฅผ ํ‘ผ ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ํ’€์ด๋ฅผ ๋ณด๋‹ˆ dfs๋กœ ๋งŽ์ด ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค.
๋‚˜๋„ dfs๋กœ ๋‹ค์‹œ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

์ด ๋ฌธ์ œ ์žก๊ณ ์žˆ๋Š๋ผ ๋ญ ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ–ˆ๋‹ค ;
์˜ค๋Š˜ ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ๋!

0๊ฐœ์˜ ๋Œ“๊ธ€