관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.평행 본문

코딩테스트/자바

[프로그래머스] Lv0.평행

100세까지 코딩 2023. 8. 9. 23:57
문제 설명

 

풀기 전 생각
  • 4개의 점이 주어졌으니 기울기로 평행을 찾아낸다
  • 중복을 제외하면 총 6개의 선분이 만들어지고, 기울기만 배열에 따로 저장한다
  • a-b, a-c, a-d, b-c, b-d, c-d 선분의 기울기
class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        double[] inclination = new double[6]; // 기울기를 저장할 배열
        int k = 0;  // 기울기 배열에 증가값을 위한 변수

        for(int i=0;i<dots.length-1;i++) {
            for(int j=i+1;j<dots.length;j++){  // a-b, a-c, a-d, b-c, b-d, c-d 기울기 구해서 넣기
                inclination[k++] = (double)(dots[j][1]-dots[i][1]) / (dots[j][0]-dots[i][0]);
                // 기울기는 (y1-y0) / (x1-x0)
            }
        }

        for(int i=0;i<inclination.length-1;i++) {
            for(int j=i+1;j<inclination.length;j++){
                if(inclination[i] == inclination[j]){ // 6개의 선분 기울기중 겹치는게 하나라도 있으면 평행
                    answer = 1;
                    break;
                }
            }
        }
        return answer;
    }
}
오류 및 개선
  • double 형으로 기울기 배열은 선언했지만 기울기를 구하는 계산에서 (double)을 안 붙여줘서
    소수점 첫째 자리로만 구해지는 것 해결.  (ex)  1/20 -> 0.0         1/20 -> 0.05
  • 테스트케이스 17개 중 5개 통과 실패
  • double 이슈를 의심했지만 아니었다
  • 고민 끝에 Q&A를 봤는데 출제자가 명확하게 문제를 설명하지 않아 나와 같은 케이스가 많았다

 

프로그래머스 질문게시판에서 가져온 글

 

최종
class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        double[] inclination = new double[6]; // 기울기를 저장할 배열
        int k = 0;  // 기울기 배열에 증가값을 위한 변수

        for(int i=0;i<dots.length-1;i++) {
            for(int j=i+1;j<dots.length;j++){  // a-b, a-c, a-d, b-c, b-d, c-d 기울기 구해서 넣기
                inclination[k++] = (double)(dots[j][1]-dots[i][1]) / (dots[j][0]-dots[i][0]);
                // 기울기는 (y1-y0) / (x1-x0)
            }
        }

        for(int i=0;i<(inclination.length-1)/2;i++) {
            if(inclination[i] == inclination[inclination.length-1-i]){ 
            // [a-b,c-d],[a-c,b-d],[a-d,b-c] 두 쌍 서로 비교
                answer = 1;
                break;
            }
        }
        return answer;
    }
}
너무 많이 헤맸다 ㅠ..