๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ (level3, python)
๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ (level3, python)

2022. 10. 13. 21:45

๐Ÿ ๋ฌธ์ œ ์„ค๋ช…

 

n๊ฐœ์˜ ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•˜๋Š” ๋น„์šฉ(costs)์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ๋ชจ๋“  ์„ฌ์ด ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ return ํ•˜๋„๋ก solution์„ ์™„์„ฑํ•˜์„ธ์š”.

๋‹ค๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฑด๋„ˆ๋”๋ผ๋„, ๋„๋‹ฌํ•  ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A ์„ฌ๊ณผ B ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๊ณ , B ์„ฌ๊ณผ C ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด A ์„ฌ๊ณผ C ์„ฌ์€ ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์ œํ•œ์‚ฌํ•ญ

  • ์„ฌ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • costs์˜ ๊ธธ์ด๋Š” ((n-1) * n) / 2์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ž„์˜์˜ i์— ๋Œ€ํ•ด, costs[i][0] ์™€ costs[i] [1]์—๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ๋‘ ์„ฌ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด์žˆ๊ณ , costs[i] [2]์—๋Š” ์ด ๋‘ ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•  ๋•Œ ๋“œ๋Š” ๋น„์šฉ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์—ฐ๊ฒฐ์€ ๋‘ ๋ฒˆ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ ๊ฐ™์€ ์—ฐ๊ฒฐ๋กœ ๋ด…๋‹ˆ๋‹ค. ์ฆ‰ 0๊ณผ 1 ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๊ณผ 0์˜ ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์„ฌ ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ ๊ฑด์„ค ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋‘ ์„ฌ ์‚ฌ์ด์˜ ๊ฑด์„ค์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์„ฌ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

costs๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ์ด๋•Œ ์ดˆ๋ก์ƒ‰ ๊ฒฝ๋กœ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ์€ ๋น„์šฉ์œผ๋กœ ๋ชจ๋‘๋ฅผ ํ†ตํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.


๐Ÿ ํ’€์ด ์ฝ”๋“œ

# ๊ฐ„์„ ๋“ค์ด ์ด์€ ์ •์ ์„ ์ฐพ๋Š” ํ•จ์ˆ˜
def find(x, Vroot):
    if x != Vroot[x]:
        Vroot[x] = find(Vroot[x], Vroot)
    return Vroot[x]
    
def solution(n, costs):
    answer = 0

    # ์—ฐ๊ฒฐ ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ์ฒ˜์Œ์—๋Š” ์ž๊ธฐ ์ž์‹ ์„ ์ €์žฅํ•˜๋Š” Vroot
    Vroot = [i for i in range(n + 1)]

    # ๊ฐ„์„ ์„ ๊ฐ€์ค‘์น˜ ๊ธฐ์ค€์œผ๋กœ ์ €์žฅ ๋ฐ ์ •๋ ฌ
    Elist = []
    for c in costs:
        # A๋ฒˆ ์ •์  / B๋ฒˆ ์ •์  / ๊ฐ€์ค‘์น˜
        Elist.append(list(map(int, c)))
    Elist.sort(key=lambda x: x[2])

    answer = 0
    for s, e, w in Elist:
        # find ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋‘ ์ •์  ์ฐพ๊ธฐ
        sRoot = find(s, Vroot)
        eRoot = find(e, Vroot)

        # ๋‘ root๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ํฐ root๊ฐ’์„ ์ž‘์€ root๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด ์—ฐ๊ฒฐ๋˜๊ฒŒ ํ•œ๋‹ค.
        if sRoot != eRoot:
            if sRoot > eRoot:
                Vroot[sRoot] = eRoot
            else:
                Vroot[eRoot] = sRoot
            # ๊ฐ€์ค‘์น˜๋ฅผ ๋”ํ•œ๋‹ค.
            answer += w

    return answer

 

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋ฌธ์ œ์˜ ์˜๋„๋Š” ์ •ํ™•ํ•˜๊ฒŒ MST(Minimum Spanning Tree, ์ตœ์†Œ ์‹ ์žฅํŠธ๋ฆฌ)๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ตœ์†Œ ์‹ ์žฅํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฃผ์„์ด ๋‹ด๊ฒจ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธํ˜•ํƒœ์ด๋‹ค.

 

๋งŒ๋“  find ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด s๋ถ€ํ„ฐ ์ด์–ด์ง„ ํŠธ๋ฆฌ, e๋ถ€ํ„ฐ ์ด์–ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘ ๊ฐœ์˜ ์ •์ ์„ ์ฐพ๋Š”๋‹ค.

๋งŒ์•ฝ s์™€ e๊ฐ€ ๋ชจ๋‘ ์ด์–ด์ ธ์„œ sRoot == eRoot๋ผ๋ฉด ์ด๋ฏธ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ๊ฐ€์ค‘์น˜ ๊ฐฑ์‹ ์ด ํ•„์š” ์—†๋‹ค.

 

ํ•˜์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์ด์–ด์ค€๋‹ค.

์ด์–ด์ค€๋‹ค๋Š” ๊ฒƒ์€ Vroot์— ์ €์žฅํ•˜๋Š”๋ฐ, ์ฒ˜์Œ์—” ์ธ๋ฑ์Šค ์ž๊ธฐ์ž์‹ ์˜ ๊ฐ’์„ ๊ฐ€์กŒ๋‹ค๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด ์—ฐ๊ฒฐ๋œ ์š”์†Œ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

10๊ฐœ์˜ ๋…ธ๋“œ ์ค‘ 1, 3, 6๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์•„๋‹ˆ๋ผ๋ฉด, Vroot๋Š” [0, 1, 2, 1, 4, 5, 1, 7, 8, 9, 10]์˜ ๊ฐ’์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ if๋ฌธ ๋‚ด๋ถ€์˜ if๋ฌธ ์—ฐ์‚ฐ์€ ์—ฐ๊ฒฐ๋œ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ฐ€์ค‘์น˜๋ฅผ ๋”ํ•˜๋ฉด์„œ ๋‹ค ์ด์–ด์งˆ ๋•Œ๊นŒ์ง€ ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ์ด์œ ๋Š” ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œ ์‹ ์žฅํŠธ๋ฆฌ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ(2) (level3, python)  (0) 2022.10.14
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฐ๋‹ฌ (level2, python)  (0) 2022.10.13
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ค„ ์„œ๋Š” ๋ฐฉ๋ฒ• (level2, python)  (1) 2022.10.13
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ (level3, python)  (0) 2022.10.13
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฉ๊ธˆ๊ทธ๊ณก (level2, python)  (1) 2022.10.13
    '๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ(2) (level3, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฐ๋‹ฌ (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ค„ ์„œ๋Š” ๋ฐฉ๋ฒ• (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ (level3, python)
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”