728x90
반응형
문제 설명
해당 문제는 네 개의 점을 두 개씩 연결해 직선을 만들었을 때, 서로 평행한 직선 쌍이 존재하는지를 판단하는 문제이다.
핵심 방법
네 점 중 두 점을 선택해 직선을 만들고, 나머지 두 점으로 또 하나의 직선을 만든다.
두 직선의 기울기를 비교해 기울기가 같으면 평행한 것으로 간주한다.
기울기를 정수형으로 비교하기 위해 분수의 곱셈 형태로 비교한다.
나눗셈을 사용하지 않는 이유는, 부동소수점(floating point) 연산의 특성상 정확한 값이 아닌 근사값으로 표현되기 때문입니다.
예를 들어,
1 ÷ 3 = 0.333... 처럼 무한 소수는 컴퓨터 내부에서 정확히 표현할 수 없고,
0.33333334처럼 근사값으로 저장된다.
따라서 0.33333334 == 0.33333334처럼 보이지만,
실제로는 미세한 오차가 존재해 == 비교가 실패할 수 있다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(vector<vector<int>> dots) {
int answer = 0;
// dots 배열에서 두 점씩 선택 (총 4개 중 2개 고르기)
for(int i = 0; i < dots.size(); i++)
{
for(int j = i + 1; j < dots.size(); j++)
{
vector<vector<int>> temp;
// i와 j를 제외한 나머지 두 점을 temp에 저장
for(int k = 0; k < dots.size(); k++)
{
if(k == i || k == j)
continue;
temp.push_back(dots[k]);
}
// 첫 번째 직선의 기울기 계산 (분수 비교를 위해 곱셈 형태로 비교)
int aSlope = (dots[j][1] - dots[i][1]) * (temp[1][0] - temp[0][0]);
// 두 번째 직선의 기울기 계산
int bSlope = (temp[1][1] - temp[0][1]) * (dots[j][0] - dots[i][0]);
// 기울기가 같으면 평행 -> 1 반환
if (aSlope == bSlope)
return 1;
}
}
// 모든 경우를 확인했는데도 평행한 직선이 없으면 0 반환
return answer;
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 보석 쇼핑 (0) | 2025.04.21 |
---|---|
코딩테스트 : 겹치는 선분의 길이 (0) | 2025.04.21 |
코딩테스트 : 옹알이(1) (0) | 2025.04.20 |
코딩테스트 : 숫자 찾기 (0) | 2025.04.20 |
코딩테스트 : 옷가게 할인 받기 (0) | 2025.04.19 |