99클럽 코테 스터디 25일차 Evaluate Division

2024. 8. 16. 01:17·스터디/99클럽 코테 스터디 TIL

📝 문제


 

💦 풀이 실패

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;

public class Solution {
    static class Edge {
        String target; // 연결 대상 노드
        double weight; // 가중치 (변수 간 비율)

        Edge(String target, double weight) {
            this.target = target;
            this.weight = weight;
        }
    }

    public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {
        // 그래프를 생성하여 변수 간의 비율 관계를 나타냄
        Map<String, List<Edge>> graph = buildGraph(equations, values);

        // 쿼리 결과를 저장할 배열 초기화
        double[] results = new double[queries.size()];
        for (int i = 0; i < queries.size(); i++) {
            var src = queries.get(i).get(0);
            var dst = queries.get(i).get(1);
            Set<String> visited = new HashSet<>(); // 방문한 노드 추적
            results[i] = dfs(src, dst, visited, graph); // DFS를 사용하여 경로 계산
        }

        return results;
    }

    private Map<String, List<Edge>> buildGraph(List<List<String>> equations, double[] values) {
        Map<String, List<Edge>> graph = new HashMap<>();
        // 방정식으로부터 그래프 생성
        for (int i = 0; i < equations.size(); i++) {
            String src = equations.get(i).get(0);
            String dest = equations.get(i).get(1);
            double value = values[i];

            // 양방향 관계를 그래프에 추가
            graph.computeIfAbsent(src, k -> new ArrayList<>()).add(new Edge(dest, value));
            graph.computeIfAbsent(dest, k -> new ArrayList<>()).add(new Edge(src, 1 / value));
        }
        return graph;
    }

    private double dfs(String src, String dest, Set<String> visited, Map<String, List<Edge>> graph) {
        if (!graph.containsKey(src)) // 출발 노드가 그래프에 없으면 -1.0 반환
            return -1.0;
        if (src.equals(dest)) // 출발 노드와 도착 노드가 같으면 1.0 반환
            return 1.0;
        visited.add(src); // 현재 노드 방문 처리

        // 현재 노드에서 연결된 모든
        for (Edge edge : graph.get(src)) {
            if (visited.contains(edge.target)) {
                continue; // 이미 방문한 노드는 건너뜀
            }
            double pathValue = dfs(edge.target, dest, visited, graph); // 재귀적으로 DFS 수행
            if (pathValue != -1.0) { // 유효한 경로 발견 시
                return pathValue * edge.weight; // 현재 간선 가중치를 곱하여 결과 반환
            }
        }

        return -1.0; // 경로를 찾을 수 없는 경우 -1.0 반환
    }
}

 

다음 포스팅을 참고하였습니다.

 

LeetCode 75: 399. Evaluate Division

399\. Evaluate DivisionYou are given an array of variable pairs equations and an array of real numbers values, where equations\[i] = \[Ai, Bi] and val

velog.io

 

'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글

99클럽 코테 스터디 27일차 할인 행사  (0) 2024.08.18
99클럽 코테 스터디 26일차 달리기 경주  (0) 2024.08.16
99클럽 코테 스터디 24일차 대충 만든 자판 [작성중]  (0) 2024.08.14
99클럽 코테 스터디 23일차 마법의 엘리베이터  (0) 2024.08.13
99클럽 코테 스터디 22일차 멀리 뛰기  (0) 2024.08.12
'스터디/99클럽 코테 스터디 TIL' 카테고리의 다른 글
  • 99클럽 코테 스터디 27일차 할인 행사
  • 99클럽 코테 스터디 26일차 달리기 경주
  • 99클럽 코테 스터디 24일차 대충 만든 자판 [작성중]
  • 99클럽 코테 스터디 23일차 마법의 엘리베이터
Been
Been
  • Been
    Been
    Been
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 언어 (0)
        • Kotlin (0)
      • 안드로이드 (17)
      • iOS (3)
      • Git (1)
      • 스터디 (39)
        • 알고리즘 문제 풀이 (1)
        • 99클럽 코테 스터디 TIL (38)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    TIL
    AndroidID
    쓰기권한
    리싸이클러뷰
    java
    WRITE EXTERNAL
    안드로이드
    FragmentStateAdapter
    아이폰
    Coroutines
    nsl
    항해99
    NSR
    풀이실패
    99클럽
    debugRuntimeClasspath
    IOS
    maxWidth
    깃
    개발자취업
    언더라인 제거
    Git
    객체변환
    EditText
    Android
    밑줄제거
    자바
    코딩테스트준비
    RecyclerView
    Androiod
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Been
99클럽 코테 스터디 25일차 Evaluate Division
상단으로

티스토리툴바