728x90
https://school.programmers.co.kr/learn/courses/30/lessons/120875#
0레벨인데 시간이 너무 많이 걸려서 속상하다 ㅜㅜ
문제 이해를 잘못해서 계속 로직을 잘못 짰었다.
문제설명
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
즉, 점을 1, 2, 3, 4라고 두면
직선 12의 기울기가 정해지면 비교 대상은 자동으로 직선 34로 정해지는 것이다.
직선 13, 직선 14의 기울기와는 비교할 필요가 없어진다.
그렇기 때문에 경우의 수가 현저하게 줄어들어서 (3개) 그냥 하나하나 다 비교를 해도 문제가 없다.
using System;
public class Solution {
public int solution(int[,] dots) {
if ((double)(dots[0, 0] - dots[1, 0]) / (dots[0, 1] - dots[1, 1]) == (double)(dots[2, 0] - dots[3, 0]) / (dots[2, 1] - dots[3, 1]))
{
return 1;
}
if ((double)(dots[0, 0] - dots[2, 0]) / (dots[0, 1] - dots[2, 1]) == (double)(dots[1, 0] - dots[3, 0]) / (dots[1, 1] - dots[3, 1]))
{
return 1;
}
if ((double)(dots[0, 0] - dots[3, 0]) / (dots[0, 1] - dots[3, 1]) == (double)(dots[1, 0] - dots[2, 0]) / (dots[1, 1] - dots[2, 1]))
{
return 1;
}
return 0;
}
}
하지만 나는 저렇게 직선 13, 직선 14와의 기울기도 비교해야하는 줄 알고 계속 아래와 같은 로직만 짜고 있었다.
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
public int solution(int[,] dots) {
HashSet<double> slopes = new HashSet<double>();
for (int i = 0; i < 4; i++) {
int x1 = dots[i, 0];
int y1 = dots[i, 1];
for (int j = i+1; j < 4; j++) { // j는 i 다음부터 시작하여 중복을 피함
int x2 = dots[j, 0];
int y2 = dots[j, 1];
if (x1 == x2 || y1 == y2) continue; // 같은 x 또는 y 값을 가진 경우 무시
double slope = (double)(y2 - y1) / (x2 - x1);
//Console.WriteLine("i is " + i + ", j is " + j);
//Console.WriteLine(slope);
if (!slopes.Add(slope)) { // HashSet.Add()는 기존 값이 있을 경우 false를 반환
return 1; // 중복이 발생하므로 1을 반환
}
//slopes.Add(slope);
}
}
/*
foreach (var item in slopes) {
Console.WriteLine(item);
}
// 중복값 제거 -> 개수 세기 -> 배열의 길이와 개수 비교
if (slopes.Distinct().Count() != 6) {
return 1;
}*/
return 0;
}
}
728x90
'Algorithm Study > Programmers' 카테고리의 다른 글
[프로그래머스] 옷가게 할인 받기 (C#) (0) | 2023.08.08 |
---|---|
[프로그래머스] 멀리뛰기 (C#) (0) | 2023.07.27 |
[프로그래머스] 달리기 경주 - 시간 복잡도를 꼭 고려해야 하는 문제 (Java) (0) | 2023.07.10 |
[프로그래머스] 과일 장수 / 영어 끝말잇기 (Java) (0) | 2023.07.10 |
[프로그래머스] 귤 고르기 / 삼총사 / 자연수 뒤집어 배열로 만들기 (Java) (0) | 2023.07.09 |