inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

    [프로그래머스] 배달(12978)

    lhs's avatar
    lhs
    Jan 09, 2025
    [프로그래머스] 배달(12978)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/12978
     

    1. 문제 풀이 아이디어

    • 플로이드 워셜 알고리즘을 활용하여 문제를 해결할 수 있다.

    2. 나의 정답 코드

    class Solution { public int solution(int N, int[][] road, int K) { int answer = 1; int[][] graph = new int[N + 1][N + 1]; for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { graph[i][j] = 500001; } } for (int i = 0; i < road.length; i++) { graph[road[i][0]][road[i][1]] = Math.min(graph[road[i][0]][road[i][1]], road[i][2]); graph[road[i][1]][road[i][0]] = Math.min(graph[road[i][1]][road[i][0]], road[i][2]); } for (int k = 1; k <= N; k++) { for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]); } } } for (int i = 2; i <= N; i++) { if (graph[1][i] <= K) answer++; } return answer; } }

    3. 정리

    • 그래프 배열을 초기화할 때, 문제의 최대값인 500001로 채운다.
    • 입력값을 처리하며 graph 배열에서 경로의 값을 갱신한다.
    • 플로이드 워셜 알고리즘을 사용하여 배열에서 각 경로의 최소값을 갱신한다.
    • answer는 1번 마을을 포함하여 1로 초기화한다.
    • 2번 마을부터 N번 마을까지 순회하며, 1번 마을에서 해당 마을까지의 경로가 K 이하일 경우 answer를 증가시킨다.
     
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog