< All posts

399. Evaluate Division

๋ฌธ์ œ ์„ค๋ช…

1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์ „์‹ ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ๋‹ค๋งŒ, ํ•ด๋‹น ์ •๋ ฌ์„ O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ O(1) ๊ณต๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

399

ํ’€์ด ๋ฐ ํ•ด์„ค

์ด ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋ผ๊ณ  ์ธ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. ์ฃผ์–ด์ง„ ๋ฐฉ์ •์‹๊ณผ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด DFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ๋ณ€์ˆ˜์—์„œ ์ข…๋ฃŒ ๋ณ€์ˆ˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ , ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฐ„์„ ์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

ํ’€์ด

class Solution:
    def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
        # 1) build graph from equations
        graph = defaultdict(list)
        for (start, end), val in zip(equations, values):
            graph[start].append((end,val))
            graph[end].append((start,1/val))
        
        # 2) define DFS to find path product
        def dfs(start,end,visited):
            if start not in graph or end not in graph:
                return -1.0
            if start==end:
                return 1.0
            
            visited.add(start)
            for neighbor,val in graph[start]:
                if neighbor in visited:
                    continue
                product = dfs(neighbor, end, visited)
                if product != -1.0:
                    return val*product
            
            return -1.0


        # 3) solve each query with DFS
        results = []
        for start,end in queries:
            results.append(dfs(start,end,set()))
        
        return results
  1. ์ฃผ์–ด์ง„ ๋ฐฉ์ •์‹๊ณผ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” ๋ณ€์ˆ˜์ด๊ณ , ๊ฐ„์„ ์€ ๋‚˜๋ˆ—์…ˆ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  2. ๊ฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด DFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ๋ณ€์ˆ˜์—์„œ ์ข…๋ฃŒ ๋ณ€์ˆ˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ , ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฐ„์„ ์˜ ๊ณฑ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

Complexity Analysis

tc

์‹œ๊ฐ„ ๋ณต์žก๋„

  • O(Q * (V + E)) ; Q๋Š” ์ฟผ๋ฆฌ์˜ ์ˆ˜, V๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ ์ˆ˜, E๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ˆ˜

๊ณต๊ฐ„ ๋ณต์žก๋„

  • O(V + E) ; ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„

Constraint Analysis

Constraints:

1 <= equations.length <= 20
equations[i].length == 2
1 <= Ai.length, Bi.length <= 5
values.length == equations.length
0.0 < values[i] <= 20.0
1 <= queries.length <= 20
queries[i].length == 2
1 <= Cj.length, Dj.length <= 5
Ai, Bi, Cj, Dj consist of lower case English letters and digits.

References

ยฉ 2025 HyunJoon Sung. All Rights Reserved.

GitHub