본문 바로가기
Develop/프로그래머스 (Cpp)

[프로그래머스] 평행 (C++)

by Tarra 2023. 3. 4.

평행 / Lv.0


문제  설명 )

점 네 개의 좌표를 담은 이차원 배열  dots가 다음과 같이 매개변수로 주어집니다.

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

 

 

제한 사항 )

  • dots의 길이 = 4
  • dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
    • 0 ≤ x, y ≤ 100
  • 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
  • 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
  • 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.

 

 

 

입출력 예 )

 

 

입출력 예 설명 )

입출력 예 #1

  • 점 [1, 4], [3, 8]을 잇고 [9, 2], [11, 6]를 이으면 두 선분은 평행합니다.

입출력 예 #2

  • 점을 어떻게 연결해도 평행하지 않습니다.

 

 

풀이)

이상하게 오늘은 집중도 안되고 알고리즘도 잘 풀리지 않는다..

 

이 문제도 어거지로 하드코딩으로 푼 듯..

 

알고리즘 말고 다른 공부를 하는게 더 좋을 것 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <string>
#include <vector>
 
using namespace std;
 
// 평행이 되면 1 리턴
bool slope(pair<vector<int>vector<int>> a, pair<vector<int>vector<int>> b)
{
    float x1 = a.first[0- a.second[0];
    float y1 = a.first[1- a.second[1];
    
    float x2 = b.first[0- b.second[0];
    float y2 = b.first[1- b.second[1];
    
    if ( y1 / x1 == y2 / x2)
    {
        return 1;
    }
    
    return 0;
}
 
 
int solution(vector<vector<int>> dots) {
    vector<int> a = dots[0];
    vector<int> b = dots[1];
    vector<int> c = dots[2];
    vector<int> d = dots[3];
    
    // [a-b, c-d], [a-c, b-d], [a-d, b-c] 조합에서 하나라도 평행이 나올 경우
    if (slope(make_pair(a, b), make_pair(c, d))
        || slope(make_pair(a, c), make_pair(b, d))
        || slope(make_pair(a, d), make_pair(b, c))
        )
        {
            return 1;
        }
    
    return 0;
}
cs

 


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

 

프로그래머스

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

programmers.co.kr