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

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

 

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

 

5073번: 삼각형과 세 변

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

www.acmicpc.net

 


 

 

1. 문제

 

 


 

 

2. 정답

<kotlin />
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") } } } } } }

 


 

 

3. 풀이

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

 

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

<kotlin />
val input = readln().split(" ").map{it.toInt()}.sorted()

 

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

<kotlin />
if (input.count{it == 0} == 3) { break }

 

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

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

 

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

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

<kotlin />
when(input.count { it == input[1] }) { 3 -> { println("Equilateral") } 2 -> { println("Isosceles") } 1 -> { println("Scalene") } }

 

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

 

 

감사합니다.