본문 바로가기
Python/알고리즘

[알고리즘] 백준 5073번: 삼각형의 세 변

by 전자여우 2024. 4. 5.

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

 

5073번: 삼각형과 세 변

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

www.acmicpc.net

 

⌨️ 입력

각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.

 

🖥️ 출력

정삼각형일 경우 Equilateral,
이등변삼각형일 경우 Isosceles,
모두 다를 경우 Scalene,
될 수 없는 경우 Invalid를 출력한다.

 

💡 아이디어

우선 삼각형이 될 수 없는 경우를 필터링한다.

3개의 숫자를 상호비교하고, 같을 경우 cnt에 1씩 더한다.

 

🧑🏻‍💻 코드

while True:
    arr = list(map(int, input().split()))
    # 종료 조건
    if sum(arr) == 0:
        break

    res = None
    cnt = 0
    # 배열 순환
    for i in range(len(arr)):
        # 두 변의 합이 나머지 한 변보다 짧으면 삼각형이 될 수 없다.
        if arr[i-1] + arr[i-2] <= arr[i]:
            res = 'Invalid'
            break
        # j를 활용해서 역순으로 크기 비교
        # (1, 0), (2, 0), (2, 1) 순으로 빈틈없이 비교하게 된다
        for j in range(i):
            if arr[i] == arr[j]:
                cnt += 1
    if not res:
        if cnt == 0:
            res = 'Scalene'
        elif cnt == 3:
            res = 'Equilateral'
        else:
            res = 'Isosceles'

    print(res)

 

💬 소감

근 10개월만에 다시 시작한 알고리즘이라 브론즈에도 지레 겁먹고 괴상하게 풀어버렸다.

그냥 조건문 네개로 처리할걸...

댓글