Algorithm/백준

[BOJ] 10101 - 삼각형 외우기

비번변경 2022. 1. 27. 16:25

문제

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

삼각형의 세 각을 입력받아, 아래와 같이 조건에 따라 정해진 문자열을 출력하라.

  • 세 각의 크기가 모두 60인 경우 : Equilateral
  • 세 각의 합이 180이고 두 각이 같은 경우 : Isosceles
  • 세 각의 합이 180이고 같은 각이 없는 경우 : Scalene
  • 세 각의 합이 180이 아닌 경우 : Error

 

풀이

조건문만 다룰 줄 안다면 해결할 수 있는 간단한 문제다. 이 글에서는 조건문을 이용한 방법 외에도 다른 방법으로 해결한 코드도 함께 정리한다.

 

1. 조건문 이용

세 개의 숫자에서 같은 값이 있는지를 따져볼 때에는, 정렬한 숫자 목록의 중간값에 해당하는 값(가운데에 위치한 숫자)이 몇 개인지 확인하면 판단할 수 있다.

import sys

li = [int(sys.stdin.readline()) for _ in range(3)]
li.sort()
if sum(li) != 180:
    print("Error")
else:
    if li.count(li[1]) == 3:
        print("Equilateral")
    elif li.count(li[1]) == 2:
        print("Isosceles")
    else:
        print("Scalene")

또한 숫자 세 개의 합이 180이면서 숫자 세 개가 모두 같은 값인 경우의 수는 유일하다. 따라서  Equilateral의 경우에는 각이 60인지 별도로 확인하지 않을 수 있다.

 

2. 배열 인덱스 이용

출력할 문자열을 선택할 때 조건문이 아니라, 배열의 인덱스를 활용한 방법이다. 조건을 일일이 나열하지 않아 좀 더 간결한 방식이다.

출력할 문자열을 선택하는 방법은 조건문을 사용할 때와 같이 정렬한 숫자의 가운데 숫자의 개수 활용한다.

import sys

li = [int(sys.stdin.readline()) for _ in range(3)]
li.sort()
if sum(li) != 180:
    print("Error")
else:
    print(["", "Scalene", "Isosceles", "Equilateral"][li.count(li[1])])

 

3. Inline if-else 표현식 사용

하나의 print 문으로 모든 경우에 대해 출력할 수 있도록 if-else문을 print문 내의 Inline if-else 표현식으로 변경할 수 있다.

import sys
li = [int(sys.stdin.readline()) for _ in range(3)]
li.sort()
print("Error" if sum(li) != 180 else ["", "Scalene", "Isosceles", "Equilateral"][li.count(li[1])])