100세까지 코딩
[프로그래머스] Lv0.평행 본문
문제 설명
풀기 전 생각
- 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;
}
}
너무 많이 헤맸다 ㅠ..
'코딩테스트 > 자바' 카테고리의 다른 글
[프로그래머스] Lv0.연속된 수의 합 (0) | 2023.08.13 |
---|---|
[프로그래머스] Lv0.분수의 덧셈 (0) | 2023.08.13 |
[프로그래머스] Lv0.겹치는 선분의 길이 (0) | 2023.08.12 |
[프로그래머스] Lv0.다음에 올 숫자 (0) | 2023.08.08 |
[프로그래머스] Lv0.옹알이 (0) | 2023.08.08 |