84페치지

import java.util.*;

class Solution {
    public String[] solution(int[][] line) {
        List<Point> points = new ArrayList<>();
        for(int i=0;i<line.length;i++){
            int[] stdLine = line[i];
            long stdA = (long)stdLine[0];
            long stdB = (long)stdLine[1];
            long stdC = (long)stdLine[2];
            for(int j=i+1;j<line.length;j++){
                long A = (long)line[j][0];
                long B = (long)line[j][1];
                long C = (long)line[j][2];
                Point point = intersection(stdA, stdB, stdC, A, B, C);
                if(point == null) continue;
                points.add(point);
            }
        }
        Point min = getMinimumPoint(points);
        Point max = getMaximumPoint(points);
            
        int width = (int)(max.x - min.x + 1);
        int height = (int)(max.y - min.y + 1);
            
        char[][] arr = new char[height][width];
        for(char[] row : arr){
            Arrays.fill(row,'.');
        }
            
        for(Point p:points){
            arr[(int)(max.y - p.y)][(int)(p.x - min.x)] = '*';
        }
    
        
        String[] answer = new String[arr.length];
        for(int i=0;i<answer.length;i++){
            //answer[i] = arr[i];
            answer[i] = new String(arr[i]);
        }
        return answer;
    }
    
    private Point getMinimumPoint(List<Point> points){
        long x = Long.MAX_VALUE;
        long y = Long.MAX_VALUE;
        
        for(Point p : points){
            x = Math.min(x, p.x);
            y = Math.min(y, p.y);
        }
        
        return new Point(x,y);
    }
    
    private Point getMaximumPoint(List<Point> points){
        long x = Long.MIN_VALUE;
        long y = Long.MIN_VALUE;
        
        for(Point p : points){
            x = Math.max(x, p.x);
            y = Math.max(y, p.y);
        }
        
        return new Point(x,y);
    }
    
    private Point intersection(long a1, long b1, long c1, long a2, long b2, long c2){
        double x = (double)(b1 * c2 - b2 * c1) / (a1 * b2 - a2 * b1);
        double y = (double)(a2 * c1 - a1 * c2) / (a1*b2 - a2*b1);
        
        if(x%1 != 0 || y%1 != 0) return null;//정수판별
        
        return new Point((long)x, (long)y);
    }
    
    private static class Point{
        public final long x, y;
        
        private Point(long x, long y){
            this.x = x;
            this.y = y;
        }
    }
}