지우너
[프로그래머스 Lv.0] 평행 C++ 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120875
계획세우기
(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;
}
'Problem Solving' 카테고리의 다른 글
[코드트리] 숫자가 가장 큰 인접한 곳으로 동시에 이동 C++ (0) | 2024.06.18 |
---|---|
[코드트리] 핀볼게임 C++ (0) | 2024.06.17 |
[코드트리] 주사위 던지기 C++ (0) | 2024.06.14 |
[코드트리] 최적의 십자 모양 폭발 C++ (0) | 2024.06.13 |
[코드트리] 2차원 폭발 게임 C++ (0) | 2024.06.12 |