[ 프로그래머스 ] #87377 : 교점에 별 만들기 - JAVA

🔗교점에 별 만들기

import java.util.*;
class Solution {
    public String[] solution(int[][] line) {
        List<long[]> points=new ArrayList<>();

        long minX=Long.MAX_VALUE;
        long maxX=Long.MIN_VALUE;
        long minY=Long.MAX_VALUE;
        long maxY=Long.MIN_VALUE;

        for(int i=0;i< line.length-1;i++){
            long A= line[i][0];
            long B=line[i][1];
            long E=line[i][2];

            for (int j = i + 1; j < line.length; j++) {
                long C = line[j][0];
                long D = line[j][1];
                long F = line[j][2];

                long dominator = A*D - B*C;

                if(dominator==0)continue;

                long xNumerator = B*F-E*D;
                long yNumerator = E*C-A*F;

                if(
                    xNumerator%dominator !=0 || 
                    yNumerator%dominator !=0
                ) continue;

                long x=xNumerator / dominator;
                long y=yNumerator / dominator;

                points.add(new long[]{x,y});

                minX=Math.min(minX, x);
                minY=Math.min(minY, y);
                maxX=Math.max(maxX, x);
                maxY=Math.max(maxY, y);
            }
        }

        int width = (int) (maxX - minX + 1);
        int height = (int) (maxY - minY + 1);

        char[][]board =new char[height][width];

        for(int i=0;i<height;i++){
            Arrays.fill(board[i], '.');
        }

        for(long[] point:points){
            long x=point[0], y=point[1];
            int row=(int) (maxY-y);
            int col=(int) (x-minX);

            board[row][col]='*';
        }

        String[] answer=new String[height];

        for(int i=0;i<height;i++){
            answer[i]=new String(board[i]);
        }

        return answer;

    }
}