ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ with Python
    PS 2021. 8. 29. 23:19
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ Programmers - [ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ]

    ๐Ÿ’ก ์กฐ๊ฑด ๋ฐ ํ’€์ด

    1. ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n, ์ถœ๋ฐœ๋…ธ๋“œ s, A์˜ ๋„์ฐฉ์ง€์  a,
      B์˜ ๋„์ฐฉ์ง€์  b, ๋…ธ๋“œ ๊ฐ„ ์ด๋™ํ•˜๋Š”๋ฐ ๋“œ๋Š” ๋น„์šฉ fares
    2. A์™€ B๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชฉ์ ์ง€๋ฅผ ํ–ฅํ•˜๊ณ  ์žˆ๋‹ค.
    3. A์™€ B๊ฐ€ ๋”ฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ๊ณผ ์–ด๋Š ์ง€์ ๊นŒ์ง€ ๊ฐ™์ด ์ด๋™ํ•˜๋Š” ๊ฒƒ ์ค‘์—
      ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
    4. ๋ฏธ๋กœ์˜ ๋ฒฝ์— ๋ถ™์–ด์žˆ์œผ๋ฉด ํƒˆ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from collections import deque
    
    
    def solution(n, s, a, b, fares):
        answer = int(1e9)
        INF = int(1e9)
        distance = [[INF] * (n + 1) for _ in range(n + 1)]
        for q, w, e in fares:
            distance[q][w] = e
            distance[w][q] = e
    
        for k in range(1, n + 1):
            for i in range(1, n + 1):
                for j in range(1, n + 1):
                    if i == j:
                        distance[i][j] = 0
                    else:
                        if distance[i][j] > distance[i][k] + distance[k][j]:
                            distance[i][j] = distance[i][k] + distance[k][j]
    
        for i in range(1, n + 1):
            if answer > distance[s][i] + distance[i][b] + distance[i][a]:
                answer = distance[s][i] + distance[i][b] + distance[i][a]
    
        return answer
    

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    print(solution(6, 4, 6, 2, [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]]))
    
    print(solution(7, 3, 4, 1, [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]]))
    
    print(solution(6, 4, 5, 6, [[2, 6, 6], [6, 3, 7], [4, 6, 7], [6, 5, 11], [2, 5, 12], [5, 3, 20], [2, 4, 8], [4, 3, 9]]))

    ์‹คํ–‰๊ฒฐ๊ณผ

    82
    14
    18

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ๋‹ด์„ graph 2์ค‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ
    2. ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ ๋…ธ๋“œ๋ผ๋ฆฌ ์–ผ๋งˆ์˜ ๋น„์šฉ์ด ๋“œ๋Š”์ง€ ๊ณ„์‚ฐ
      i์—์„œ j๋กœ ๊ฐ€๋Š” ๋น„์šฉ๊ณผ i์—์„œ k๋ฅผ ๊ฒฝ์œ ํ•˜์—ฌ j๋กœ ๊ฐ€๋Š” ๋น„์šฉ ์ค‘์— ๋” ์ €๋ ดํ•œ ๊ฒƒ
    3. answer๋ฅผ ๋” ์ €๋ ดํ•œ ๋น„์šฉ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด 1e9๋กœ ์ดˆ๊ธฐํ™”
    4. for ๋ฌธ์œผ๋กœ 1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ n๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.
      answer์™€ ์ถœ๋ฐœ์ง€(s)์—์„œ i๊นŒ์ง€ ํ•ฉ์Šนํ•œ ๊ฐ’ + i ๋ถ€ํ„ฐ B์˜ ๋ชฉ์ ์ง€๊นŒ์ง€ ๊ฐ€๋Š” ๊ฐ’ + i ๋ถ€ํ„ฐ A์˜ ๋ชฉ์ ์ง€๊นŒ์ง€ ๊ฐ€๋Š” ๊ฐ’ ๋น„๊ต

    ๐Ÿ’พ ๋Š๋‚€์ 

    • BFS๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ด๋™๊ฑฐ๋ฆฌ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ์ƒ์„ฑํ•ด ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋‹ค.
      ๊ทธ ๊ฒฐ๊ณผ ์‹œ๊ฐ„์„ ๋งค์šฐ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์„ ๋– ์˜ฌ๋ ค ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ–ˆ๋‹ค.
    • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค.
      ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์ด๋ฉด ๊ตณ์ด BFS๊ฐ€ ์—†๋Š”๋ฐ ์œ„์—์„œ ๋งํ•œ BFS ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘์—ˆ์—ˆ๋‹ค.
    • ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. 26๋ฒˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
      ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ๋ถ€๋ถ„๊ณผ ๋ฐ˜ํ™˜ํ•  answer๋ฅผ ์œ„ํ•ด ๋น„๊ตํ•˜๋Š” ๋ถ€๋ถ„์—์„œ min() ๋Œ€์‹ 
      if๋ฅผ ์จ์ฃผ์—ˆ๋”๋‹ˆ ์†๋„์ฐจ์ด๊ฐ€ ๋‘ ๋ฐฐ ๊ฐ€๊นŒ์ด ๋‚ฌ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.