개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘  - 코틀린 풀이

 

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

 

5073번: 삼각형과 세 변

각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.

www.acmicpc.net

 


 

 

문제

 

 


 

 

정답

fun main() {
    while(true) {
        val input = readln().split(" ").map{it.toInt()}.sorted()

        if (input.count{it == 0} == 3) {
            break
        } else {
            if (input[2] >= input[0] + input[1]) { println("Invalid") }
            else {
                when(input.count { it == input[1] }) {
                    3 -> { println("Equilateral") }

                    2 -> { println("Isosceles") }

                    1 -> { println("Scalene") }
                }
            }
        }
    }
}

 


 

 

풀이

5073번 문제는 삼각형의 세 변의 길이에 따른 분기를 통해 결과를 출력하는 문제입니다.

 

세 변의 길이 중 가장 긴 변과 나머지 변들을 비교해야 하므로 오름차순 정렬을 해줍니다.

val input = readln().split(" ").map{it.toInt()}.sorted()

 

종료 조건인 0 0 0 을 처리 해야 하므로 입력 숫자 중 0이 3개 발견되면 종료하는 조건문을 먼저 추가합니다.

if (input.count{it == 0} == 3) {
    break
}

 

종료 조건이 아닌 경우엔 오류 조건인 가장 긴 변의 길이가 나머지 두 변의 길이의 합보다 큰 경우를 처리합니다.

if (input[2] >= input[0] + input[1]) { println("Invalid") }

 

마지막으로 종료도, 에러도 아닌 일반 경우를 처리합니다.

세 변의 길이를 비교하기 위해 중간 길이의 변을 기준으로 삼고, 그 변과 같은 길이의 변이 몇 개 있는지를 필터링합니다.

when(input.count { it == input[1] }) {
    3 -> { println("Equilateral") }

    2 -> { println("Isosceles") }

    1 -> { println("Scalene") }
}

 

3개일때는 정삼각형, 2개일때는 이등변 삼각형, 1개 일때는 일반 삼각형입니다.

 

 

감사합니다.