[알고리즘] Swift -백준 #4153 (직각삼각형)

2022. 8. 9. 03:42ALGORITHM/Swift

728x90
반응형

문제링크

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

 

 


풀이

while true {
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let a = input[0]
    let b = input[1]
    let c = input[2]
    
    if a==0 && b==0 && c==0 {
        break
    }
    
    var max = a > b ? a : b
    max = max > c ? max : c
    
    var result = false
    if max == a {
        if a*a == b*b + c*c {
            result = true
        }
    } else if max == b {
        if b*b == a*a + c*c {
            result = true
        }
    } else {
        if c*c == a*a + b*b {
            result = true
        }
    }
    print(result ? "right" : "wrong")
}

 

결과

 

 

시간이랑 메모리는 똑같지만 좀 더 간결한 코드 (sorted() 이용)

while true {
    let input = readLine()!.split(separator: " ").compactMap{ Int($0) }.sorted()
    if input[0]==0 && input[1]==0 && input[2]==0 {
        break
    }
        
    if input[2]*input[2] == input[1]*input[1] + input[0]*input[0] {
        print("right")
    } else {
        print("wrong")
    }
}

 

 

 

 

 

 

 

 

 

 
728x90
반응형