[프로그래머스] 평행

yoontaeng·2022년 11월 4일
0
post-thumbnail

📎 문제링크

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축과 평행한 경우는 주어지지 않습니다.

📝 문제풀이

배열과 반복문을 이용한 기울기 비교

💡 Code

초기코드

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;
    }
}

👍 Comment

처음에는 배열을 사용해서 기울기를 비교하고 같은값이 있으면 1을 리턴
근데 배열을 사용하게 되면 초기 배열의 크기를 정확하게 할당 시켜주어야 하기 때문에 list로 변환해서 고정된 크기가 아닌 기울기 값이 들어간 만큼 크기가 설정 되어서 좀 더 쉽게 문제풀이가 가능하다.

profile
병아리개발자

0개의 댓글