[코딩테스트연습] 코딩테스트 입문 > Lv.0 평행
2024. 3. 16. 14:02ㆍ코딩 테스트/[프로그래머스] Java
문제 설명
문제 풀이
[try1]
임의의 두 점을 이었을 때, 두 직선이 서로 평행하거나 겹치는 경우 1을 return하는 문제이다.
음 .. 그렇다면 주어진 4개의 점을 모두 직선으로 만들어 보아야 한다는 것 같았다!
복잡해보이지만 우선 시도해보았다.
1. 4개의 점들 중 2개, 2개를 선택한다.
2. 2개의 기울기, 2개의 기울기를 비교한다.
3. 서로 같으면 1, 다르면 다른 직선과 비교를 이어나간다.
4. 이전에 선택했던 2개, 2개의 조합과는 다르게 선택한다. -> 이 부분이 문제인 것 같다!!!!!!!
class Solution {
public int solution(int[][] dots) {
/*
(0,1)(2,3)
(0,2)(1,3)
(0,3)(1,2)
사실 위 조합이 다 인것 같구만!
*/
int line1 = ((dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]));
int line2 = ((dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]));
if(line1==line2) return 1;
int line3 = ((dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]));
int line4 = ((dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]));
if(line3==line4) return 1;
int line5 = ((dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]));
int line6 = ((dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]));
if(line5==line6) return 1;
else return 0;
}
}
근데 위 코드를 실행했을 때, 테스트2번에서 오류가 발생했다.
설마 나눗셈인데 int형으로 형변환되는 과정에서 숫자가 달라진 것인지 확인해보기 위해 다시 코드를 작성했다.
[try2]
그 결과 역시 데이터 타입이 문제였다!
class Solution {
public int solution(int[][] dots) {
double line1 = ((double)(dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]));
double line2 = ((double)(dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]));
if(line1==line2) return 1;
double line3 = ((double)(dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]));
double line4 = ((double)(dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]));
if(line3==line4) return 1;
double line5 = ((double)(dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]));
double line6 = ((double)(dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]));
if(line5==line6) return 1;
else return 0;
}
}
다른 사람의 풀이 보기
1. 기울기를 구하는 함수를 따로 구분하여 실행하기
'코딩 테스트 > [프로그래머스] Java' 카테고리의 다른 글
[코딩테스트연습] 코딩테스트 입문 > Lv.0 삼각형의 완성조건(1) (0) | 2024.03.18 |
---|---|
[코딩테스트연습] 코딩테스트 입문 > Lv.0 안전지대 (2) | 2024.03.16 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 문자열안에 문자열 (0) | 2024.03.16 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 최댓값 만들기(1) (0) | 2024.03.16 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 특정 문자 제거하기 (0) | 2024.03.16 |