지우너

[프로그래머스 Lv.0] 평행 C++ 본문

Problem Solving

[프로그래머스 Lv.0] 평행 C++

지옹 2024. 6. 14. 14:49

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120875

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

계획세우기

(01 23) (02 13) (03, 12) 3가지 경우만 보면 될 거 같다.

dots[0]과 dots[1]을 이은 직선과 dots[2]와 dots[3]을 이은 직선의 기울기 비교

"기울기 = y증가량/x증가량 = $\frac{(y_2-y_1)}{(x_2-x_1)}$"으로 구하면 된다.

 

풀이

나누기라서 소수가 나올 수 있으므로 float으로 계산해주어야 한다. int / int 는 int 로 자동 형변환이 되기 때문에 float으로 변환해주어야 한다. 한쪽만 float으로 해도 되지만, 그냥 양쪽 모두 float으로 변환해주었다.

#include <string>
#include <vector>

using namespace std;

float Calculate(int x1, int y1, int x2, int y2){
    return (float)(y2-y1)/(float)(x2-x1);
}

//주어진 네 개의 점을 두 개씩 이었을 때,
//두 직선이 평행이 되는 경우가 있으면 1 없으면 0 return
int solution(vector<vector<int>> dots) {
    int answer = 0;
    // (01 23) (02 13) (03, 12) 3가지 경우만 보면 될 거 같다
    float line1 = Calculate(dots[0][0], dots[0][1], dots[1][0],dots[1][1]);
    float line2 = Calculate(dots[2][0], dots[2][1], dots[3][0],dots[3][1]);
    if(line1==line2) answer=1;
    
    line1 = Calculate(dots[0][0], dots[0][1], dots[2][0],dots[2][1]);
    line2 = Calculate(dots[1][0], dots[1][1], dots[3][0],dots[3][1]);
    if(line1==line2) answer=1;
    
    line1 = Calculate(dots[0][0], dots[0][1], dots[3][0],dots[3][1]);
    line2 = Calculate(dots[1][0], dots[1][1], dots[2][0],dots[2][1]);
    if(line1==line2) answer=1;
    
    return answer;
}