package Programmers;
import java.util.*;
public class ProgrammingBasic {
public static void main(String[] args){
int[][] dots = {{1, 4}, {9, 2}, {3, 8}, {11, 6}};
System.out.println(solution(dots));
}
public static int solution(int[][] dots) {
//평행인걸 확인하는 방법은 점과 점 사이의 길이가 같은지 확인하는 것
//8 , 2 / 8 / 2
//2개씩 짝짓는 방법은
// 1,2 / 3,4 1,3/2,4 1,4/2,3
float[] lengths = new float[6];
int index = 0;
for(int i = 0; i < dots.length; i++){
for(int j = i+1; j < dots.length; j++){
int x1 = dots[i][0];
int y1 = dots[i][1];
int x2 = dots[j][0];
int y2 = dots[j][1];
lengths[index] = (int) Math.sqrt(Math.pow(x2-x1,2) + Math.pow(y2-y1,2));
index++;
}
}
for(int i = 0; i < lengths.length; i++){
for(int j = i+1; j < lengths.length; j++){
if(lengths[i] == lengths[j]){
return 1;
}
}
}
return 0;
}
}
처음에 풀은 코드다 점과 점의 길이가 서로 같으면 평행한다는 기준으로 코드를 작성했는데 절반만 맞았다고 했다
그래서 뭔가 이상해서 조금 무식하게 다시 풀어봤다
점과 점의 거리의 길이가 같다고 해서 평행한건 아니였다 그래서 서로의 기울기를 기준으로 같은지 판단하는 코드를 짰다
class Solution {
public int solution(int[][] dots) {
int answer = 0;
float a = (float) Math.abs(dots[0][1] - dots[1][1]) / Math.abs(dots[0][0] - dots[1][0]);
float b = (float) Math.abs(dots[2][1] - dots[3][1]) / Math.abs(dots[2][0] - dots[3][0]);
if (Math.abs(a - b) < 0.00001) {
return 1;
}
float c = (float) Math.abs(dots[0][1] - dots[2][1]) / Math.abs(dots[0][0] - dots[2][0]);
float d = (float) Math.abs(dots[1][1] - dots[3][1]) / Math.abs(dots[1][0] - dots[3][0]);
if (Math.abs(c - d) < 0.00001) {
return 1;
}
float e = (float) Math.abs(dots[0][1] - dots[3][1]) / Math.abs(dots[0][0] - dots[3][0]);
float f = (float) Math.abs(dots[1][1] - dots[2][1]) / Math.abs(dots[1][0] - dots[2][0]);
if (Math.abs(e - f) < 0.00001) {
return 1;
}
return answer;
}
}
기울기가 가능한 모든 경우의 수는 3가지밖에 없으므로 간단하게 작성했다.