2022년 04월 26일 화요일 - 배포가 얼마 안남아서 두렵다....


오늘 올려볼 문제는 1584번 Min Cost to Connect All Points 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진 leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

딱보자마자 아 귀찮겠구나 싶었다


입력


사진에서도 볼 수 있듯이 2차원 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


주어진 점들로 MST를 만들고 모든 선들의 길이의 합을 구하는 문제다.


오늘은 시행착오를 겪었다.

그저 브루트 포스로 풀면 될 줄 알았으나 MST 조건을 만족하지 못해서 prim 알고리즘을 활용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minCostConnectPoints(int[][] points) {
        boolean[] visit = new boolean[points.length];
        PriorityQueue<Node> pq = new PriorityQueue<>();

        visit[0] = true;

        {
            int[] p1 = points[0];
            for(int j = 1; j < points.length; j++)
            {
                int[] p2 = points[j];

                int dist = Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);

                pq.add(new Node(0, j, dist));
            }
        }

        int result = 0;
        int count = 1;

        while(true)
        {
            Node now = pq.poll();

            if(count == points.length) break;

            if(visit[now.i] && visit[now.j]) continue;

            if(!visit[now.i] && visit[now.j])
            {
                visit[now.i] = true;
                count++;

                for(int i = 0; i < points.length; i++)
                {
                    if(!visit[i])
                    {
                        int[] p1 = points[now.i], p2 = points[i];

                        int dist = Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);

                        pq.add(new Node(i, now.i, dist));
                    }
                }
            }
            else if(visit[now.i] && !visit[now.j])
            {
                visit[now.j] = true;
                count++;

                for(int i = 0; i < points.length; i++)
                {
                    if(!visit[i])
                    {
                        int[] p1 = points[now.j], p2 = points[i];

                        int dist = Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]);

                        pq.add(new Node(i, now.j, dist));
                    }
                }
            }

            result += now.dist;
        }

        return result;
    }
}


class Node implements Comparable<Node>{
    int i, j;
    int dist;

    public Node(int i, int j, int dist)
    {
        this.i = i;
        this.j = j;
        this.dist = dist;
    }

    @Override
	public int compareTo(Node n) {
        return this.dist - n.dist;
	}
}





제출 화면

leetcode 문제 맞았습니다


오늘은 문제가 생각보다 어려웠다.

내일은 깔삼하게 잘 풀 수 있었으면 좋겠다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts