https://school.programmers.co.kr/learn/courses/30/lessons/120875
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
0 ≤ dots의 원소 ≤ 100
dots의 길이 = 4
dots의 원소의 길이 = 2
dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
배열과 반복문을 이용한 기울기 비교
import java.util.*;
class Solution {
public int solution(int[][] dots) {
int answer = 0;
double slope[]=new double[6];// 중복제외
double disX=0;
double disY=0;
int count=0;
for(int i=0;i<4;i++){
for(int j=i+1;j<4; j++){
//i j 같은값이 나오면 안되니깐 i+1
disX =dots[j][0]-dots[i][0];
disY =dots[j][1]-dots[i][1];
slope[count]=disY/disX; //기울기
count++;
}
}
for(int k=0;k<6;k++){
double temp=slope[k];
System.out.print(temp+" ");
for(int q=k+1;q<6;q++){
if(temp==slope[q]){// 배열에 같은값이 있으면 1리턴 반복문 탈출
answer=1;
break;
}
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int[][] dots) {
int answer = 0;
ArrayList<Double>slope=new ArrayList<>();// list 선언
double disX=0;
double disY=0;
int count=0;
for(int i=0;i<4;i++){
for(int j=i+1;j<4; j++){
//i j 같은값이 나오면 안되니깐 i+1
disX =dots[j][0]-dots[i][0];
disY =dots[j][1]-dots[i][1];
double temp1=disY/disX;
slope.add(temp1);
}
}
for(int k=0;k<slope.size();k++){
double temp=slope.get(k);
for(int p=k+1;p<slope.size();p++){
if(temp==slope.get(p)){
answer=1;
break;
}
}
}
return answer;
}
}
처음에는 배열을 사용해서 기울기를 비교하고 같은값이 있으면 1을 리턴
근데 배열을 사용하게 되면 초기 배열의 크기를 정확하게 할당 시켜주어야 하기 때문에 list로 변환해서 고정된 크기가 아닌 기울기 값이 들어간 만큼 크기가 설정 되어서 좀 더 쉽게 문제풀이가 가능하다.