[알고리즘] Swift -프로그래머스 연습문제 #120875(평행)

2023. 4. 4. 22:46ALGORITHM/Swift

728x90
반응형

문제링크

 

 

 

 

분석

점 4개의 좌표를 담은 2차원배열이 주어질 때, 두 직선이 평행이 되는 경우가 있으면 1을 리턴, 없으면 0을 리턴하는 문제

 

풀이 과정

서로 다른 2개 이상의 점이 겹치는 경우는 없다. -> 같은 위치의 점이 없다.

두 직선이 겹치는 경우에도 1을 리턴한다.

임의의 두점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않는다.

 

평행의 조건은 직선의 기울기가 서로 같아야한다.
두 직선의 기울기를 구해서 같은 지 확인한다.
기울기를 구하는 공식은 (y의 증가량)/(x의 증가량)

 

func makeInclination(dot1: [Int], dot2: [Int]) -> Int {
    let x1 = dot1[0]
    let y1 = dot1[1]
    
    let x2 = dot2[0]
    let y2 = dot2[1]
    
    return (y2-y1) / (x2-x1)
}

기울기를 구하는 함수를 만든다.

테스트 2번 실패 ...

나누기를 하면 Int 값으로 몫만 나오기 때문에 소수점이 있을 경우도 같다고 나온다.

소수점까지 비교해서 같아야지 평행하기 때문에 Int형을 Float형으로 변경해준다.

func makeInclination(dot1: [Int], dot2: [Int]) -> Float {
    let x1 = dot1[0]
    let y1 = dot1[1]
    
    let x2 = dot2[0]
    let y2 = dot2[1]
    
    return Float(y2-y1) / Float(x2-x1)
}

 

 

풀이

import Foundation

func makeInclination(dot1: [Int], dot2: [Int]) -> Float {
    let x1 = dot1[0]
    let y1 = dot1[1]
    
    let x2 = dot2[0]
    let y2 = dot2[1]
    
    return Float(y2-y1) / Float(x2-x1)
}

func solution(_ dots:[[Int]]) -> Int {
    var result = 0
    
    if makeInclination(dot1: dots[0], dot2: dots[1]) == makeInclination(dot1: dots[2], dot2: dots[3]) {
        result = 1
    }
    if makeInclination(dot1: dots[0], dot2: dots[2]) == makeInclination(dot1: dots[1], dot2: dots[3]) {
        result = 1
    }
    if makeInclination(dot1: dots[0], dot2: dots[3]) == makeInclination(dot1: dots[1], dot2: dots[2]) {
        result = 1
    }
    
    return result
}

 

결과

print(solution([[3, 5], [4, 1], [2, 4], [5, 10]]    ))

 

 

 


📂  정리

예외상황을 잘 처리해야한다.

나누기했을 때 소수점까지 처리할 때는 Float 나 Double 을 사용해서 나타내야한다.

 

 

 

 

 

728x90
반응형