programmers_교점에 별 만들기_java
2023. 6. 1. 11:46ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/87377
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public String[] solution(int[][] line) {
String[] answer = {};
long miny = Long.MAX_VALUE;
long maxy = Long.MIN_VALUE;
long minx = Long.MAX_VALUE;
long maxx = Long.MIN_VALUE;
// 정수 값을 갖는 교점 리스트
List<long[]> pointList = new ArrayList<>();
for (int i = 0; i<line.length; i++){
for (int j = i+1; j<line.length; j++){
long[] intersectionPoint = findIntersectionPoint(line[i], line[j]);
if (intersectionPoint != null){
miny = Math.min(miny, intersectionPoint[1]);
maxy = Math.max(maxy, intersectionPoint[1]);
minx = Math.min(minx, intersectionPoint[0]);
maxx = Math.max(maxx, intersectionPoint[0]);
pointList.add(intersectionPoint);
}
}
}
// map 배열 생성 및 초기화
char[][] map = new char[(int)(maxy - miny + 1)][(int)(maxx - minx + 1)];
for (int i = 0; i<map.length; i++){
Arrays.fill(map[i], '.');
}
// 교점 입력
for (long[] point : pointList){
int x = (int)(point[0] - minx);
int y = (int)(point[1] - miny);
map[y][x] = '*';
}
// char[][] -> String[]
// 음수가 아래로 가도록
answer = new String[map.length];
for (int i = 0; i<map.length; i++){
StringBuilder sb = new StringBuilder();
for (int j = 0; j<map[i].length; j++){
sb.append(map[i][j]);
}
answer[map.length - i - 1] = sb.toString();
}
return answer;
}
// x, y가 정수 값인 교점 찾기(int -> 오버플로우, double -> 오류)
public long[] findIntersectionPoint(int[] line1, int[] line2){
long A = line1[0];
long B = line1[1];
long E = line1[2];
long C = line2[0];
long D = line2[1];
long F = line2[2];
long[] point = new long[2];
if((A * D - B * C) != 0){
if((B * F - E * D) % (A * D - B * C) == 0){
point[0] = (B * F - E * D) / (A * D - B * C);
}else{
return null;
}
if((E * C - A * F) % (A * D - B * C) == 0){
point[1] = (E * C - A * F) / (A * D - B * C);
}else{
return null;
}
}else {
return null;
}
return point;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_유사 칸토어 비트열_java (0) | 2023.06.02 |
---|---|
programmers_택배 배달과 수거하기_java (0) | 2023.06.01 |
programmers_카카오프렌즈 컬러링북_java (0) | 2023.05.31 |
programmers_양궁대회_java (0) | 2023.05.29 |
programmers_과제 진행하기_java (1) | 2023.05.26 |