[프로그래머스] Lv. 2 교점에 별 만들기(Java)
by rowing0328https://school.programmers.co.kr/learn/courses/30/lessons/87377
정답 코드
import java.util.*;
class Solution {
private static class Point {
public final long x, y;
private Point(long x, long y) {
this.x = x;
this.y = 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);
}
// 저장된 정수 x, y 좌표의 최솟값 구하기
private Point getMinimumPoint(List<Point> points) {
long x = Long.MAX_VALUE;
long y = Long.MAX_VALUE;
for (Point p : points) {
if (p.x < x) x = p.x;
if (p.y < y) y = p.y;
}
return new Point(x, y);
}
// 저장된 정수 x, y 좌표의 최댓값 구하기
private Point getMaximumPoint(List<Point> points) {
long x = Long.MIN_VALUE;
long y = Long.MIN_VALUE;
for (Point p : points) {
if (p.x > x) x = p.x;
if (p.y > y) y = p.y;
}
return new Point(x, y);
}
public String[] solution(int[][] line) {
List<Point> points = new ArrayList<>();
for(int i = 0; i < line.length; i++) {
for(int j = i + 1; j < line.length; j++) {
Point intersection = intersection(
line[i][0], line[i][1], line[i][2],
line[j][0], line[j][1], line[j][2]
);
if (intersection != null) {
points.add(intersection);
}
}
}
Point minimum = getMinimumPoint(points);
Point maximum = getMaximumPoint(points);
int width = (int) (maximum.x - minimum.x + 1);
int height = (int) (maximum.y - minimum.y + 1);
// 2차원 배열 크기 정하기
char[][] arr = new char[height][width];
for (char[] row : arr) {
Arrays.fill(row, '.');
}
for (Point p : points) {
int x = (int) (p.x - minimum.x);
int y = (int) (maximum.y - p.y);
arr[y][x] = '*';
}
String[] result = new String[arr.length];
for (int i = 0; i < result.length; i++) {
result[i] = new String(arr[i]);
}
return result;
}
}
설명
실행 결과
참고 자료 :
'🏅Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv. 1 자연수 뒤집어 배열로 만들기(Java) (0) | 2025.01.13 |
---|---|
[프로그래머스] Lv. 2 삼각 달팽이(Java) (2) | 2024.12.28 |
[프로그래머스] Lv. 4 호텔 방 배정(Kotlin) (0) | 2024.12.27 |
[프로그래머스] Lv. 2 신규 아이디 추천(Kotlin) (2) | 2024.12.12 |
[프로그래머스] Lv. 4 가사 검색(Java) (4) | 2024.12.09 |
블로그의 정보
코드의 여백
rowing0328