문제
코드
fun main() {
while (true) {
val (a, b, c) = readln().split(' ').map { it.toInt() }.sorted()
if (c == 0) break
println(
when {
c >= a + b -> "Invalid"
a == b && b == c -> "Equilateral"
a == b || b == c -> "Isosceles"
else -> "Scalene"
}
)
}
}
풀이
문제 자체는 간단해 보였다.
가장 긴 변을 알아야 하기 때문에 정렬이 필요해 보였고, 정렬을 하면 삼각형 변의 길이 비교가 쉬워진다
처음 작성한 코드는 아래와 같다
fun main() {
while (true) {
val side = readln().split(' ').map { it.toInt() }.sorted()
if (side[2] == 0) break
if (side[0] == side[1] && side[1] == side[2]) println("Equilateral")
else if (side[0] == side[1] || side[1] == side[2]) println("Isosceles")
else if (side[2] >= side[0] + side[1]) println("Invalid")
else println("Scalene")
}
}
오름차순 정렬이기 때문에 가장 큰 수가 side의 2번째 요소에 들어있게 된다
이 값이 0이면 앞의 값도 전부 0이 되기때문에(입력은 양의 정수이기 때문) 종료 조건으로 side[2] == 0인지 확인하도록 했다.
근데 이렇게 작성했을 때 틀렸다고 나왔다.
뭐가 문제인가 싶어서 살펴보니, Invalid를 판단하는 조건이 위로 올라와야 한다고 생각이 들었다
만약에 2 2 5 이런 입력이 들어오면 삼각형이 될 수 없는데, 두 변의 길이가 같은 경우로 빠질 수 있기 때문이었다
수정한 코드가 아래와 같다.
fun main() {
while (true) {
val side = readln().split(' ').map { it.toInt() }.sorted()
if (side[2] == 0) break
if (side[2] >= side[0] + side[1]) println("Invalid")
else if (side[0] == side[1] && side[1] == side[2]) println("Equilateral")
else if (side[0] == side[1] || side[1] == side[2]) println("Isosceles")
else println("Scalene")
}
}
근데 코드가 너무 지저분해 보였다.
그래서 when문을 활용해서 코드를 알아보기 쉽게 수정했다
수정된 코드는 풀이 단락 위의 코드 부분을 확인
'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#1157 단어 공부 (0) | 2024.07.23 |
---|---|
#2292 벌집 (0) | 2024.07.22 |
#23971 ZOAC 4 (0) | 2024.07.22 |
#1655 가운데를 말해요 (0) | 2024.07.20 |
#12865 평범한 배낭 (0) | 2024.07.19 |
댓글