import java.util.*;
class Point {
double x, y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
}
class Solution {
public String[] solution(int[][] line) {
String[] answer;
ArrayList<Point> arr = new ArrayList<>();
long x_min = Long.MAX_VALUE, x_max = Long.MIN_VALUE;
long y_min = Long.MAX_VALUE, y_max = Long.MIN_VALUE;
for (int i = 0; i < line.length; i++) {
double A = (double) line[i][0];
double B = (double) line[i][1];
double E = (double) line[i][2];
for (int j = i; j < line.length; j++) {
double C = (double) line[j][0];
double D = (double) line[j][1];
double F = (double) line[j][2];
if (A * D - B * C == 0) {
continue;
} else {
double x = (B * F - E * D) / (A * D - B * C);
double y = (E * C - A * F) / (A * D - B * C);
if (x == (long) x && y == (long) y) {
x_min = Math.min(x_min, (long) x);
x_max = Math.max(x_max, (long) x);
y_min = Math.min(y_min, (long) y);
y_max = Math.max(y_max, (long) y);
arr.add(new Point(x, y));
}
}
}
}
int height = (int) Math.abs(y_max - y_min) + 1;
int weight = (int) Math.abs(x_max - x_min) + 1;
char[][] map = new char[height][weight];
for (int i = 0; i < height; i++) {
for (int j = 0; j < weight; j++) {
map[i][j] = '.';
}
}
int len = arr.size();
for (int i = 0; i < len; i++) {
Point p = arr.get(i);
double x = p.x - x_min;
double y = p.y - y_min;
map[(int) y][(int) x] = '*';
}
answer = new String[(int) height];
for (int i = 0; i < height; i++) {
answer[i] = new String(map[height - i - 1]);
}
return answer;
}
}
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/87377
'알고리즘 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 > 스택/큐 (0) | 2021.10.14 |
---|---|
코딩테스트 연습 > 정렬 (0) | 2021.10.13 |
코딩테스트 연습 > 힙(Heap) (0) | 2021.10.13 |
스킬체크 level 3 (0) | 2021.10.12 |
위클리 챌린지 > 9주차 (0) | 2021.10.10 |
댓글