[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆœ์œ„/Python - Lv.3

2024. 9. 28. 15:59ยทCoding Test/Algorithms

โ“๋ฌธ์ œ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ“Œ์œ ํ˜•

๊ทธ๋ž˜ํ”„, Floyd-Warshall

โœ๐Ÿปํ’€์ด

1) ๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ
- ์ด๊ธด ๊ทธ๋ž˜ํ”„์™€ ์ง„ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋งŒ๋“ฆ.
- 1์€ 2๋ฒˆ์„ ์ด๊น€. 1๋ฒˆ์˜ ์ด๊ธด ๊ทธ๋ž˜ํ”„์— 2๋ฒˆ์—๊ฒŒ ์ง„ 5๋ฒˆ ๋…ธ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ.
- 1์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์ง€์ง€ ์•Š์Œ.
- 2๋ฒˆ์€ 5๋ฒˆ์„ ์ด๊ธฐ๊ณ , 1, 3, 4๋ฒˆ์—๊ฒŒ ์ง. 1, 3, 4๋ฒˆ ์ด๊ธด ๊ทธ๋ž˜ํ”„์— 5๋ฒˆ์„ ์—…๋ฐ์ดํŠธ.
  5๋ฒˆ ์ง„ ๊ทธ๋ž˜ํ”„์—๋Š” 1, 3, 4๋ฒˆ์„ ์—…๋ฐ์ดํŠธ.
- ๊ฐ ๋…ธ๋“œ์˜ ์ด๊ธด ๊ทธ๋ž˜ํ”„์™€ ์ง„ ๊ทธ๋ž˜ํ”„์˜ ๊ธธ์ด์˜ ํ•ฉ์ด n - 1๊ณผ ๊ฐ™๋‹ค๋ฉด answer๋ฅผ 1 ์ฆ๊ฐ€.

2) Floyd-Warshall
- 1๋ฒˆ์ด 2๋ฒˆ์„ ์ด๊น€. graph[2][1]์„ 1๋กœ ์ดˆ๊ธฐํ™”. ์ด์™€ ๊ฐ™์ด ์ง„ ๋ถ€๋ถ„์€ 1๋กœ ์ดˆ๊ธฐํ™”.
- ๊ทธ๋ž˜ํ”„๋ฅผ ๋”ฐ๋ผ DP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์†Œ ๊ฒฝ๋กœ ๊ณ„์‚ฐ.
- INF๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฆ‰ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด count๋ฅผ 1 ์ฆ๊ฐ€.
- count๊ฐ€ n-1๊ณผ ๊ฐ™๋‹ค๋ฉด answer์„ 1 ์ฆ๊ฐ€.

๐Ÿ’ป์ฝ”๋“œ

# ๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ
from collections import defaultdict

def solution(n, results):
    answer = 0
    win, lose = defaultdict(set), defaultdict(set)

    for i, j in results:
        win[i].add(j)
        lose[j].add(i)

    for i in range(1, n + 1):
        for w in win[i]:
            lose[w].update(lose[i])
        for l in lose[i]:
            win[l].update(win[i])

    for i in range(1, n + 1):
        if len(win[i]) + len(lose[i]) == n - 1:
            answer += 1

    return answer
# Floyd-Warshall

def solution(n, results):
    answer = 0
    INF = 1e9
    
    graph = [[INF] * (n + 1) for _ in range(n + 1)]
    
    for i, j in results:
        graph[j][i] = 1 
    
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            if i == j:
                graph[i][j] = 0
                
    for k in range(1, n + 1):
        for i in range(1, n + 1):
            for j in range(1, n + 1):
                graph[i][j] = min(graph[i][k] + graph[k][j], graph[i][j])
                
    for i in range(1, n + 1):
        count = 0
        for j in range(1, n + 1):
            if graph[i][j] != INF or graph[j][i] != INF:
                count += 1 
        if count == n:
            answer += 1
    
    return answer

๐Ÿ’ก์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ

Floyd-Warshall
- ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์Œ.
- ์–‘•์Œ์ˆ˜ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
- ๋ฐฉํ–ฅ, ๋ฌด๋ฐฉํ–ฅ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
- ๋ชจ๋“  ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•˜์—ฌ DP๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธ.
- ๋„คํŠธ์›Œํฌ ๋ฐ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์šฉ์ด.

Pseudo-Code
------------------------------------------------------------------------------------------------
For i = 0 to n – 1
For j = 0 to n – 1
Distance[i, j] = min(Distance[i, j], Distance[i, k] + Distance[k, j])

where i = source Node, j = Destination Node, k = Intermediate Node

 

'Coding Test > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 15649.N๊ณผ M (1)/Java - Silver3  (0) 2024.09.29
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฃผ์‹๊ฐ€๊ฒฉ/Java - Lv.2  (0) 2024.09.29
[๋ฐฑ์ค€] 28278. ์Šคํƒ 2/Java - Silver4  (0) 2024.09.28
[๋ฐฑ์ค€] 2750. ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ/Java - Bronze2  (1) 2024.09.28
[๋ฐฑ์ค€] 1546. ํ‰๊ท /Java - Bronze1  (1) 2024.09.28
'Coding Test/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฃผ์‹๊ฐ€๊ฒฉ/Java - Lv.2
  • [๋ฐฑ์ค€] 28278. ์Šคํƒ 2/Java - Silver4
  • [๋ฐฑ์ค€] 2750. ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ/Java - Bronze2
  • [๋ฐฑ์ค€] 1546. ํ‰๊ท /Java - Bronze1
The Engineer, Lucy
The Engineer, Lucy
  • The Engineer, Lucy
    Growing up for My Future๐Ÿ’•
    The Engineer, Lucy
    • Instagram
    • GitHub
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (171) N
      • Linux (26)
      • Infra (9)
      • Cloud (25)
        • AWS (2)
        • GCP (3)
        • Docker (4)
        • Kubernetes (14)
        • IaC (2)
      • NGINX (1)
      • DevOps (3)
      • Computer Science (17)
        • Data Structure (0)
        • Algorithms (1)
        • Operating System (3)
        • Network (11)
        • Database System (2)
      • Coding Test (85) N
        • Algorithms (77) N
        • SQL (7)
      • ETC (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ๋งํฌ

    • Lucy's Instagram
    • Lucy's GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ๋„์ปค
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€
    cs ๊ธฐ์ดˆ ์ง€์‹ ์ •๋ฆฌ
    K8s
    bfs
    Linux
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰
    ๋ฐฑ์ค€
    dfs
    ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
    ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
    ์‰˜ ์Šคํฌ๋ฆฝํŠธ
    Java
    network
    ์˜ค๋ธ”์™„
    ๋ฆฌ๋ˆ…์Šค
    ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ ์ง€์‹
    Shell Script
    programmers
    ์ž๋ฐ”
    Baekjoon
    ๋„คํŠธ์›Œํฌ
    Shell
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ
    ์…ธ ์Šคํฌ๋ฆฝํŠธ
    Kubernetes
    docker
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
The Engineer, Lucy
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆœ์œ„/Python - Lv.3
์ƒ๋‹จ์œผ๋กœ

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