[알고리즘] Swift -프로그래머스 연습문제 #120875(평행)
2023. 4. 4. 22:46ㆍALGORITHM/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
반응형
'ALGORITHM > Swift' 카테고리의 다른 글
[알고리즘] Swift -프로그래머스 연습문제 #161990(바탕화면 정리) (0) | 2023.04.05 |
---|---|
[알고리즘] Swift -프로그래머스 연습문제 #120876(겹치는 선분의 길이) (0) | 2023.04.05 |
[알고리즘] Swift -프로그래머스 연습문제 #120956(옹알이(1)) (0) | 2023.04.04 |
[알고리즘] Swift -프로그래머스 연습문제 #172927(광물 캐기) (0) | 2023.04.04 |
[알고리즘] Swift -프로그래머스 연습문제 #172928(공원 산책) (0) | 2023.04.02 |